home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / TP052492.ARJ / 05-24-92.TPC
Text File  |  1992-05-24  |  94KB  |  2,865 lines

  1.  
  2. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3.  
  4. Conference 4
  5. Date       01-01-00 00:00:00
  6. From       
  7. To         
  8. Subject    
  9.  
  10.  
  11. --- WM v2.01/92-0100
  12.  * Origin: A.C.E. of Spades (615)383-4381 The B.A.N. board (1:116/33)
  13.  * Tossed by SFToss v1.00b on 92/04/09  12:01:00
  14.  
  15. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  16.  
  17. Conference 4
  18. Date       05-17-92 01:10:27
  19. From       Mark Ouellet
  20. To         All
  21. Subject    Looking for frequable SHAZAM
  22.  
  23.  
  24. Hi All,
  25.         I'm looking for this file SHAZAM which is a Turbo
  26. Vision program generator.
  27.  
  28.         If any one has this file up for Freq, from unlisted
  29. nodes, please let me know.
  30.  
  31.         I know it's on Turbo-city but they only allow freqs
  32. for FILES unless you are a member which I'm not.
  33.  
  34.         Best regards,
  35.         Mark Ouellet.
  36.  
  37.  
  38.  
  39. --- ME2
  40.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  41.  * Tossed by SFToss v1.00b on 92/05/17  14:37:26
  42.  
  43. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  44.  
  45. Conference 4
  46. Date       05-17-92 05:20:38
  47. From       Trevor Carlsen
  48. To         Dj Murdoch
  49. Subject    Re: Encryption of sorts.
  50.  
  51.  
  52.  
  53.  TC> function MakeCodeStr(key : longint; s: string): string;
  54.  TC>     RandSeed := (key * len) DIV st[len];
  55.  
  56.  DM> Just so that you don't have unintended side effects, I'd save the old 
  57.  
  58.  DM> RandSeed and restore it at the end of the routine.  
  59.  
  60. I cannot think of why you would suggest this.  What possible side effects
  61. are there?  As you know RandSeed receives a new value every time a call to
  62. the Random function is made so any program relying on RandSeed to have a particu
  63. ar value should save it itself.
  64.  
  65. TeeCee
  66.  
  67. --- TC-ED   v2.01  
  68.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  69.  * Tossed by SFToss v1.00b on 92/05/17  22:01:25
  70.  
  71. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  72.  
  73. Conference 4
  74. Date       05-17-92 10:08:22
  75. From       Trevor Carlsen
  76. To         Florian Stupperich
  77. Subject    HELP! CRT - Window() replacement
  78.  
  79.  
  80.  
  81.  FS> I am searching for a replacement of the CRT - WINDOW()
  82.  FS> command ! I want to output the characters with the
  83.  FS> WRITE/WRITELN command. Who can help me ? Who knows
  84.  FS> such a procedure ? Please answer.
  85.  
  86. There is nothing that stops you from using write/writeln in a window.  In
  87. fact that is all you can use if you want to remain inside the window co-ordinate
  88. .  Perhaps I am misunderstanding what it is that you seek?
  89.  
  90. TeeCee
  91.  
  92. --- TC-ED   v2.01  
  93.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  94.  * Tossed by SFToss v1.00b on 92/05/17  22:01:25
  95.  
  96. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  97.  
  98. Conference 4
  99. Date       05-17-92 10:22:23
  100. From       Trevor Carlsen
  101. To         Greg Johnson
  102. Subject    Re: Shelling To Dos
  103.  
  104.  
  105.  
  106.  GJ> {$M $4000,0,0}  (*Don't forget that second $ sign*)
  107.  
  108. The second dollar sign is irrelevant unless of course you particularly intend
  109. it to be there.  Your message gives the impression that it is a requirement.
  110.  It is not.  Your message also indicated that a previous message writer was
  111. wrong in the advice he offered.  He was not.
  112.  
  113. Check out p272 in the Programmer's guide or type {$M in the IDE and press
  114. Control-F1 for detailed information.
  115.  
  116. The following compiler directives are identical in their effect -
  117.  
  118.   {$M $4000,0,0}    and
  119.   {$M 16384,0,0}
  120.  
  121. as $4000 (hex 4000) is equal to 16384.
  122.  
  123. TeeCee
  124.  
  125.  
  126.  
  127. --- TC-ED   v2.01  
  128.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  129.  * Tossed by SFToss v1.00b on 92/05/17  22:01:25
  130.  
  131. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  132.  
  133. Conference 4
  134. Date       05-17-92 00:38:00
  135. From       Norbert Igl
  136. To         Roger Joelsson
  137. Subject    16550 chip
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  >> Turbo Powers Async Pro has a Unit that does this.  I don't think
  144.  
  145.  > Do you think I could f'req it from you? Please do send some net-mail
  146.  > about this if it's OK..
  147.  
  148.    I think, you can't... its commercial...
  149.  
  150.  > (I'm in real need of such a 16550 detector, and I've searched here in
  151.  > Sweden, and the above software doesn't seem to be available anywhere
  152.  > here.)
  153.  
  154.   i've posted this a few day's ago, hmm, it's not so big (:-)
  155.  
  156. -------------------------8<---------------------------------
  157.  
  158. Const ComPortText : Array[0..4] of String[12] =
  159.   (' N/A ','8250/8250B','8250A/16450','16550A','16550N');
  160.       IIR     = 2;
  161.       SCRATCH = 7;
  162. Var   PortAdr : Array[1..4] of Word absolute $40:0;
  163.  
  164. function ComPortType(ComX:byte):byte;
  165.  
  166. BEGIN
  167.   ComPortType:=0;
  168.   if (PortAdr[ComX] =0)
  169.   or (Port[PortAdr[ComX]+ IIR ] and $30 <> 0)
  170.      then exit;                                         {No ComPort !}
  171.   Port[PortAdr[ComX]+ IIR ] := 1;                       {Test: enable FIFO}
  172.   if (Port[PortAdr[ComX]+IIR] and $C0) = $C0            {enabled ?}
  173.   then ComPortType := 3
  174.   else If (Port[PortAdr[ComX]+IIR] and $80) = $80       {16550,old version..}
  175.        then ComPortType := 4
  176.        else begin
  177.        Port[Portadr[ComX]+SCRATCH]:=$AA;
  178.        if Port [Portadr[ComX]+SCRATCH]=$AA              {w/ scratch reg. ?}
  179.            then ComPortType:= 2
  180.            else ComPortType:= 1;
  181.        end;
  182. END;
  183.  
  184. { ...test...}
  185. var com : byte;
  186. begin
  187.   writeln('COMPORT-CHIPTEST                 Norbert Igl,2:241/5300.3');
  188.   for com := 1 to 4 do
  189.     writeln(' Com',com,' chip type : ',ComPortText[ComPortType(com)]);
  190. end.
  191.  
  192.  
  193. Bye from Germany, Norbert
  194.  
  195. ---
  196.  * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  197.  * Tossed by SFToss v1.00b on 92/05/18  09:13:30
  198.  
  199. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  200.  
  201. Conference 4
  202. Date       05-17-92 08:44:58
  203. From       Dj Murdoch
  204. To         David G. Edwards
  205. Subject    Re: Procedures...
  206.  
  207.   >I don't understand this - why should exit procedures be 
  208.  > special?  Do you 
  209.  >think the same thing about unit initialization sections?  
  210.  
  211.  DG> Symmetry.  In a program an Init proc may open files, so a 
  212.  DG> Done proc will close the files.  An exit proc to undo a 
  213.  DG> unit's initialization is entirely okay.  
  214.  
  215.  DG> In the program I was discussing, the "assign" was in the 
  216.  DG> main part, so, IMO, the "close" belonged in the main part. 
  217.  DG>  If I hid the close in an exit proc, five months later 
  218.  DG> when looking at the code, I'd say, "Egads, I forgot to 
  219.  DG> close the file!"  Then add the close in main, and cause 
  220.  DG> the exit proc to fail.
  221.  
  222.  DG> I'm not dogmatic about it, and I appreciate your insight.
  223.  
  224. I think that your symmetry idea ends up with pretty much the same result as
  225. my ownership idea.  I probably wouldn't get another component of the program
  226. to open files if I was expecting my unit to close them, unless ownership were
  227. specifically transferred.  So my programs end up pretty symmetrical, and I'd
  228. guess your programs probably respect ownership, even if you never think about
  229. it that way. 
  230.  
  231. --- Msg V3.2
  232.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  233.  * Tossed by SFToss v1.00b on 92/05/18  09:13:38
  234.  
  235. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  236.  
  237. Conference 4
  238. Date       05-17-92 08:59:54
  239. From       Dj Murdoch
  240. To         David G. Edwards
  241. Subject    Re: Pascal style #2
  242.  
  243.   >  IF (Y > 10)
  244.  >    THEN X := 2
  245.  >      ELSE X := 1;
  246.  
  247.  DG> It's correct that parens and indents promote clarity, 
  248.  DG> etc., but in real programs an indenting style like this 
  249.  DG> will quickly become unworkable.  I'm basing this on 6 
  250.  DG> years of maintaining a 60,000+ line Pascal program.  
  251.  DG> Please refer to Ledgard's _Professional Pascal_ (ISBN 
  252.  DG> 0-201-11776-2): he has an entire chapter on layout.
  253.  
  254. Could you give us some samples?  For example, how would Ledgard format the
  255. fragment above?  I'd format it as
  256.  
  257.   if Y > 10 then
  258.     X := 2
  259.   else
  260.     X := 1;
  261.  
  262. I think the people who capitalize keywords have it exactly backwards:  keywords
  263. should be lower case, since they're just grammar.  Variable names should often
  264. have leading capitals, since they're proper names.  (Some variables, like
  265. loop counters, are essentially grammar, so I don't capitalize everything.)
  266.  
  267. --- Msg V3.2
  268.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  269.  * Tossed by SFToss v1.00b on 92/05/18  09:13:38
  270.  
  271. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  272.  
  273. Conference 4
  274. Date       05-17-92 09:08:33
  275. From       Dj Murdoch
  276. To         Mark Ouellet
  277. Subject    Re: Help - Reading Records At
  278.  
  279.   MO> Jud,
  280.  MO>         Seek DOES work on bytes if you declare your record to be of 1 byte
  281.  
  282.  MO> length.
  283.  
  284. I prefer using streams for this sort of thing, because you automatically get
  285. a 1 byte record size, and error checking is easier.
  286.  
  287. You had:
  288.  
  289.  MO> BEGIN
  290.  MO>     My_File_Name := 'Clients.dbf';
  291.  MO>     ASSIGN(My_File, My_File_Name);
  292.  MO>     RESET(My_File, 1);
  293.  MO>                   {^ important}
  294.  MO>     SEEK(My_File, 0);
  295.  MO>     Bytes_To_Read := SIZEOF(One_Header);
  296.  MO>     BLOCKREAD(My_file, My_Header, Bytes_To_Read, Bytes_Read);
  297.  MO>     IF (Bytes_Read <> Bytes_To_Read) THEN BEGIN
  298.  
  299. I'd use:
  300.  
  301.   My_stream := New(PBufStream, init('Clients.dbf',stOpenRead, 2048));
  302.   My_stream^.read(My_Header,sizeof(My_header));
  303.   if My_stream^.status <> stOK then
  304.     { handle the error }
  305.  
  306. The advantage of this approach (besides being a little shorter) is that it's
  307. likely to be a lot faster:  you don't get buffered I/O on untyped files.
  308.  
  309.  MO>     { To get record 400 (Zero based) }
  310.  
  311.  MO>     Record_To_Get := 400;
  312.  MO>     Bytes_To_Read := SIZEOF(One_Record);
  313.  MO>     Offset_Of_Record := SIZEOF(One_Header) +
  314.  MO>                         (Record_To_Get * Bytes_To_Read);
  315.  
  316. Watch out here - your Offset_Of_Record is going to be incorrect if it's out
  317. further than 64K.  A safer calculation is
  318.  
  319.   Offset_of_record := sizeof(One_Header) + 
  320.                        LongMul(Record_To_Get*Bytes_To_Read);
  321.  
  322. A disadvantage is that streams and LongMul are only available in TP 6 and
  323. later.
  324.  
  325.  
  326. --- Msg V3.2
  327.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  328.  * Tossed by SFToss v1.00b on 92/05/18  09:13:38
  329.  
  330. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  331.  
  332. Conference 4
  333. Date       05-17-92 09:17:47
  334. From       Dj Murdoch
  335. To         Shahar Prish
  336. Subject    Re: Screen Save
  337.  
  338.   GG> Wouldn't this be just *Slightly* slow ? Something as the
  339.  GG> following would be much much faster:
  340.  
  341.  GG> Var
  342.  GG>   F:File;
  343.  
  344.  GG> Begin
  345.  GG>   Assign (F,<filename>);
  346.  GG>   {$I-} Rewrite (F); {$I+}
  347.  GG>   If ( IOResult <> 0 ) then ErrorHandler;
  348.  GG>   BlockWrite (F,Mem[$B800:0],4000);
  349.  GG>   Close(F);
  350.  GG> End.
  351.  
  352.  SP> Yes! U R right, only the q. seemed 2 come from some1 who 
  353.  SP> doesn't know PAS very well..
  354.  
  355.  No, he was wrong.  He opened the file with a record size of 128; he'll be
  356. trying to write 128*4000 = 512000 bytes.  I think that'll overflow and turn
  357. into the word value 53248, but it certainly won't do what he wanted.
  358.  
  359. That's why I avoid untyped files and BlockRead/BlockWrite.  It's just too
  360. easy to make this kind of error, and a real pain to find.
  361.  
  362. --- Msg V3.2
  363.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  364.  * Tossed by SFToss v1.00b on 92/05/18  09:13:38
  365.  
  366. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  367.  
  368. Conference 4
  369. Date       05-17-92 09:24:42
  370. From       Dj Murdoch
  371. To         Gordon Tackett
  372. Subject    Re: Multiple Constructors/Destructors
  373.  
  374.   > There's an obscure, but very serious, problem with
  375.  > nested constructors. It's VERY important to use
  376.  > ObjName.Method rather than just Method, when the
  377.  > default constructor calls the general constructor.
  378.  
  379.  GT> This is very true but I don't think that it is in the 
  380.  GT> manual (I looked and couldn't find it). I was aware of 
  381.  GT> this but just didn't talk about the draw back in the message.
  382.  
  383. It's there, but not where you'd expect it.  Look in Chapter 17, in the Construct
  384. rs and Destructors subsection.  It's p. 230 in my manual.  I've been told
  385. it doesn't appear at all in the German translation of the manual.
  386.  
  387.  
  388. --- Msg V3.2
  389.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  390.  * Tossed by SFToss v1.00b on 92/05/18  09:13:38
  391.  
  392. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  393.  
  394. Conference 4
  395. Date       05-18-92 01:21:55
  396. From       Trevor Carlsen
  397. To         Josh Lippy
  398. Subject    Re: The function "pos"
  399.  
  400.  
  401.  
  402.  TC> function UpString(Mixed: string): string;
  403.  TC>   var L : byte;
  404.  TC>   begin
  405.  TC>     UpString[0] := Mixed[0];
  406.  TC>     for L := 1 to length(Mixed) do
  407.  TC>       UpString[L] := UpCase(Mixed[L]);
  408.  TC>   end;
  409.  
  410.  JL> It's not good to assign the value to the function until the
  411.  JL> end of the function, therefore it would be better to use a
  412.  JL> tempstr and assign upstring to tempstr outside of the loop.
  413.  
  414. I'm willing to listen to arguments on your reasoning but just making such
  415. a statement without a reason does nothing to convince me! Why is it not good?
  416.  
  417. TeeCee
  418.  
  419. --- TC-ED   v2.01  
  420.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  421.  * Tossed by SFToss v1.00b on 92/05/18  20:17:45
  422.  
  423. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  424.  
  425. Conference 4
  426. Date       05-18-92 01:25:18
  427. From       Trevor Carlsen
  428. To         Josh Lippy
  429. Subject    Re: Unix Style timestamp 
  430.  
  431.  
  432.  
  433.  JL> Give me a break, stop ragging on the only guy that was ever
  434.  JL> able to come up with a working Unix date converter.  It's
  435.  JL> not how he programs, it's that he takes the time to share it
  436.  JL> with the rest of us.
  437.  
  438. There has been at least 3 and possibly 4 different people post working Unix
  439. date units here in the echo at various times.  Brian Stark's unit was one
  440. and a good one at that.  My comments were purely suggesting an improvement
  441. to it.
  442.  
  443. If you are looking for more units and can't find others, just yell...
  444.  
  445. TeeCee
  446.  
  447.  
  448. --- TC-ED   v2.01  
  449.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  450.  * Tossed by SFToss v1.00b on 92/05/18  20:17:45
  451.  
  452. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  453.  
  454. Conference 4
  455. Date       05-18-92 01:53:11
  456. From       Trevor Carlsen
  457. To         Jud Mccranie
  458. Subject    Re: Pascal Style #2
  459.  
  460.  
  461.  
  462.  TC> I would normally choose the second method, although there are
  463.  TC> occasions when a third method is preferable.
  464.  
  465.  JM>  TC>   x := succ(ord(y > 10));
  466.  
  467.  JM> I think the third method is not desirable.  It happens to
  468.  JM> work in this case, due to the way I chose the numbers, but
  469.  JM> it will rarely work.
  470.  
  471. Can you give a case where it does not work?  Obviously if you want values
  472. other than 1 or 2 for x it cannot work as written although the modification
  473. is trivial.  I don't recommend using it across the board but there are some
  474. instances when it is the best.
  475.  
  476.  JM> PS, is my origin line OK now?
  477.  
  478. Yep... fine.  Thanks.
  479.  
  480. TeeCee
  481.  
  482.  
  483.  
  484. --- TC-ED   v2.01  
  485.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  486.  * Tossed by SFToss v1.00b on 92/05/18  20:17:45
  487.  
  488. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  489.  
  490. Conference 4
  491. Date       05-18-92 01:59:16
  492. From       Trevor Carlsen
  493. To         Roger Joelsson
  494. Subject    Help Needed with TP arrays
  495.  
  496.  
  497.  
  498.  TC> Thearray : array[0..max] of byte;
  499.  TC> *if* max is not a constant.
  500.  
  501.  RJ> I wonder if, or better said, how this would work... As far
  502.  RJ> as I know, the only way of creating dynamically allocated
  503.  RJ> memory is via pointers to varibles. (But then, though, we
  504.  RJ> aren't talking about indexed arrays any more) Does anyone
  505.  RJ> know if Turbo Pascal has the ability to create dynamically
  506.  RJ> allocated arrays? (C has the _malloc and _calloc function,
  507.  RJ> but TP??)
  508.  
  509. The above was to illustrate that dynamic allocation using standard methods
  510. will not work. However the fix is simple, just declare the array as [0..0],
  511. allocate the required memory via GetMem and do your own range checking as
  512. normal range checking must be disabled.  
  513.  
  514. Another, some say better, way is to declare the array to maximum allowable
  515. size but only allocate the required memory - again by GetMem.  Program range
  516. checking remains essential as normal range checking will not catch errors.
  517.  
  518. TeeCee
  519.  
  520. --- TC-ED   v2.01  
  521.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  522.  * Tossed by SFToss v1.00b on 92/05/18  20:17:45
  523.  
  524. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  525.  
  526. Conference 4
  527. Date       05-18-92 02:05:36
  528. From       Trevor Carlsen
  529. To         Roger Joelsson
  530. Subject    Rename
  531.  
  532.  
  533.  
  534.  RJ> Of course, you could also use the Reset procedure to check the 
  535.  RJ> existance of the file... i.e.:
  536.  
  537.  RJ> Function Exists (FileName : String) : Boolean;
  538.  RJ> VAR
  539.  RJ>    FileStr : Text;
  540.  RJ> BEGIN
  541.  RJ>      {$I-}
  542.  RJ>      Assign (FileStr, FileName);
  543.  RJ>      Reset (FileStr);
  544.  RJ>      Exists := IOResult = 0;
  545.  RJ>      Close (FileStr);
  546.  RJ> END;
  547.  
  548.  RJ> This function would return True if the file exists or false when the 
  549.  
  550.  RJ> file isn't there.
  551.  
  552. Not quite true...   It would also return false if the file existed but was
  553. write protected, either by SHARE or by attribute.
  554.  
  555. TeeCee
  556.  
  557. --- TC-ED   v2.01  
  558.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  559.  * Tossed by SFToss v1.00b on 92/05/18  20:17:45
  560.  
  561. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  562.  
  563. Conference 4
  564. Date       05-18-92 07:46:02
  565. From       Dj Murdoch
  566. To         Joshua Kersey @ 930/22
  567. Subject    Re: blah...
  568.  
  569.  DM> Just treat your .EXE as a resource file, and store the .PCX files DM> each
  570. as separate resources.  It's fairly painless.
  571.  
  572.  JK> Wow...that simply bewildered me. I've tried doing it 
  573.  JK> before with the .BGI's but never got it to work. Could you 
  574.  JK> give me an example?
  575.  
  576. Sure, I'll try.  Only problem is, I've got no idea what a .PCX file is like,
  577. so whatever I come up with is probably way off.  I'll assume they're less
  578. than 64K.  Watch out, though, the code below might not even compile. 
  579.  
  580.  type
  581.    PPCXpicture = ^TPCXpicture;
  582.    TPCXpicture = object(TObject)
  583.     { some fields here that are necessary for decoding - maybe size, pixel 
  584.  
  585.       depth, that sort of thing. }
  586.      
  587.      size : word;
  588.      data : pointer;
  589.  
  590.      constructor init(filename:string);
  591.      { Reads a .PCX file into memory }
  592.  
  593.      constructor Load(var S:TStream);
  594.      { Loads a .PCX file from a stream or Resourcefile or .EXE }
  595.  
  596.      procedure Store(var S:TStream);
  597.      { Stores a .PCX file to a stream, etc. }
  598.  
  599.      destructor done; virtual;
  600.  
  601.     { Whatever other things you might want to do to the picture. }
  602.   end;
  603.  
  604. { You need to register types to use them on Resource files.  Here's
  605.   the info: }
  606.  
  607. const
  608.   RPCXpicture : TStreamRec  = (Objtype: 1001;
  609.                                VmtLink: Ofs(TypeOf(TPCXPicture)^);
  610.                                Load:    @TPCXPicture.Load;
  611.                                Store:   @TPCXPicture.Store
  612.                               );
  613.                                
  614.  
  615.   constructor TPCXpicture.Init(filename : string);
  616.   var
  617.     S:TBufStream;
  618.   begin
  619.     S.init(filename,stOpenRead,2048);   { Open the file with a 2048 byte 
  620.                                           buffer }
  621.     if S.status <> stOK then
  622.       fail;
  623.     size := S.GetSize;
  624.     if Size > 65521 then
  625.       writeln('Can''t load files that big! Redesign me.');
  626.     getmem(data,Size);
  627.     S.Read(data^,size);
  628.     S.done;                             { Closes the file }
  629.   end;
  630.  
  631.   destructor TPCXpicture.done;
  632.   begin
  633.     freemem(data,size);                 { Clean up our allocation }
  634.     TObject.done;                       { Call the parent destructor }
  635.   end;
  636.  
  637.   procedure TPCXpicture.Store(var S:TStream);
  638.   begin
  639.     { first write the size, and any additional fields you've added }
  640.     S.write(size,sizeof(size));
  641.  
  642.     { next write the data }
  643.     S.write(data^,size);
  644.   end;
  645.    
  646.   constructor TPCXpicture.Load(var S:TStream);
  647.   begin
  648.     if not TObject.Init then            { Call the parent init; often this
  649.                                           would be TParent.Load }
  650.       fail;  
  651.     S.read(size,sizeof(size));          
  652.     if maxavail < size then
  653.       fail;
  654.     getmem(data,size);
  655.     S.read(data^,size);
  656.   end;
  657.    Okay, that's the basic setup.  Now, to move one into your .EXE file, you
  658. just do the following: 
  659.  
  660.   var
  661.     EXE:TResourceFile; 
  662.     PCX:PPCXpicture;
  663.   begin
  664.     { Register our type. }
  665.     RegisterType(RPCXPicture);
  666.  
  667.     { Open the current .EXE as a buffered stream, and pass it to the resource
  668.       file. }
  669.     EXE.init( New(PBufStream, 
  670.                   init(paramstr(0), stOpen, 2048))); 
  671.         
  672.     { Read one into memory }
  673.     new(PCX,load( 'mypic.pcx' ));
  674.  
  675.     { Store it in the .EXE with the name "mypic" }
  676.     EXE.put(PCX, 'mypic');       
  677.  
  678.     EXE.done;    { Close the .EXE }
  679.  
  680. To read one from your .EXE, use the same declarations, register the type,
  681. open the .EXE, and then:
  682.  
  683.    PCX := EXE.get('mypic');
  684.  
  685. That's all there is to it!
  686.  
  687.  
  688. --- Msg V3.2
  689.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  690.  * Tossed by SFToss v1.00b on 92/05/19  08:58:30
  691.  
  692. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  693.  
  694. Conference 4
  695. Date       05-18-92 08:20:02
  696. From       Dj Murdoch
  697. To         Bruce Ruona
  698. Subject    Re: Compression
  699.  
  700.   BR> Speaking of your streams unit...Grin...
  701.  BR>  
  702.  BR> I just picked up a copy of it the other day, Primarily for 
  703.  BR> the compression ability, however, I was disappointed that 
  704.  BR> yours suffers from the same problems I've found in 99% of 
  705.  BR> the compression source codes I've looked at, namely 
  706.  BR> lacking the ability to store more then one archive per 
  707.  BR> file.  For example, using your stream unit to COMPRESS 
  708.  BR> test.lzw *.pas {I Believe I have the syntax correct there?}
  709.  BR>  
  710.  BR> I haven't had much of a chance to play with this, but how 
  711.  BR> hard would this be to add?  seems to me all that would be 
  712.  BR> necessary is adding header containing appropriate 
  713.  BR> compression information (name, date, crc, size etc?) 
  714.  BR> previous to storing the actual resultant compressed 
  715.  BR> file-or am I way off base here (Possible since I just 
  716.  BR> started messing with streams and other such oddities in 
  717.  BR> the past month or so 8-)
  718.  
  719. First of all, you're much better off to use an archive utility than my compressi
  720. n code if you want to make archives.  Why rewrite code that others have spent
  721. a long time perfecting?  You'll find that PKZIP and the other modern archives
  722. do better compression than the TLZWfilter does, and they've solved all the
  723. problems of putting multiple files into an archive.
  724.  
  725. But if you're determined to do it yourself, you've got the right idea.  Write
  726. out an uncompressed header for each file, then turn on compression (by init'ing
  727. a new TLZWFilter) and copy the file into the archive.  How hard this would
  728. be would depend on how fancy you wanted it to be.  ARC and ZIP files are pretty
  729. careful to make sure you can recover some of the files if part of the archive
  730. file is damaged; that requires some forethought - you have to be able to recogni
  731. e a header when you come into the file in the middle somewhere. 
  732.  
  733. You also have to worry about the typical operations that people will want
  734. to do on archives:  delete one file, add one file in the middle, "freshen"
  735. a set of files, etc.
  736.  
  737. Compression is obviously a key part of an archive utility, but there's a lot
  738. more to them too. 
  739.  
  740. --- Msg V3.2
  741.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  742.  * Tossed by SFToss v1.00b on 92/05/19  08:58:30
  743.  
  744. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  745.  
  746. Conference 4
  747. Date       05-18-92 08:30:10
  748. From       Dj Murdoch
  749. To         Trevor Carlsen
  750. Subject    Re: Encryption of sorts.
  751.  
  752.   TC> function MakeCodeStr(key : longint; s: string): string;
  753.  TC>     RandSeed := (key * len) DIV st[len];
  754.  
  755.  DM> Just so that you don't have unintended side effects, 
  756.  TC> I'd save the old 
  757.  DM> RandSeed and restore it at the end of the routine.  
  758.  
  759.  TC> I cannot think of why you would suggest this.  What 
  760.  TC> possible side effects are there?  As you know RandSeed 
  761.  TC> receives a new value every time a call to the Random 
  762.  TC> function is made so any program relying on RandSeed to 
  763.  TC> have a particular value should save it itself.
  764.  
  765. What I was thinking of is this:
  766.  
  767.   I randomize, and generate ten random numbers.
  768.   I encrypt something.
  769.   I generate ten more random numbers.
  770.  
  771. If the encryption routine messes with Randseed, and the thing I encrypt is
  772. the same in every run of the program, then the second group of random numbers
  773. will always be the same in every run.  If I call Randomize after the encryption,
  774. they'll probably be the same as the first group, at least on a fast machine.
  775.  
  776.  
  777.  
  778. --- Msg V3.2
  779.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  780.  * Tossed by SFToss v1.00b on 92/05/19  08:58:30
  781.  
  782. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  783.  
  784. Conference 4
  785. Date       05-18-92 08:42:44
  786. From       Dj Murdoch
  787. To         Kevin Higgins
  788. Subject    Re: Another oddity of TP 6.0!
  789.  
  790.   KH> When you forget the single quotes around the string to 
  791.  KH> search for in the FindFirst procedure, TP 6.0 will give 
  792.  KH> you an "Unexpected end of file" error.
  793.  KH> (eg., FindFirst(*.*,0,sr); instead of FindFirst('*.*',0,sr);)
  794.  
  795. Nice one!  That's not a bug though.  The problem is that "(*" begins a comment;
  796. the compiler thought that your whole program following FindFirst was a big
  797. comment, and was surprised when it hit the end of file before you closed it.
  798.  
  799. The error message could be a little more informative, couldn't it?
  800.  
  801.  
  802. --- Msg V3.2
  803.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  804.  * Tossed by SFToss v1.00b on 92/05/19  08:58:30
  805.  
  806. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  807.  
  808. Conference 4
  809. Date       05-18-92 08:52:25
  810. From       Dj Murdoch
  811. To         John Kessel
  812. Subject    Re: Reading in boot-sector
  813.  
  814.   JK> Who knows how to read in the boot-sector the offsets 39 
  815.  JK> untill 42 (27 untill 2A).
  816.  
  817.  JK> This contains the serial-number from a diskette.
  818.  
  819. To read the boot sector of a floppy disk, you need to use the DOS absolute
  820. disk read service (INT 25h) or the BIOS disk read service.  Watch out - Intr
  821. doesn't work with INT 25h, because it's a far procedure, not an interrupt
  822. service routine.
  823.  
  824. But you can get and set the disk serial number without touching the boot sector
  825. directly.  DOS gives you access, using AX=440D, BL=drive number, CH=08, CL=46h
  826. (set) or 66h (get).  DS:DX should point to a record of the form
  827.   
  828.   type
  829.     parmblock = record   
  830.       info_level : word;  { always 0 }
  831.       serial_number:longint;
  832.       volume_label :array[1..11] of char;
  833.       filesystem   :array[1..8] of char;
  834.     end;
  835.  
  836. I hope this helps.
  837.  
  838. --- Msg V3.2
  839.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  840.  * Tossed by SFToss v1.00b on 92/05/19  08:58:30
  841.  
  842. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  843.  
  844. Conference 4
  845. Date       05-18-92 09:05:14
  846. From       Dj Murdoch
  847. To         Stephane Michaud
  848. Subject    Re: Mark, Release in units
  849.  
  850.   SM>         I made a procedure in turbo pascal 6.0. it's a normal procedure
  851.  SM> wich is in a unit.  In that procedure, it tried to use the mark and
  852.  SM> release functions and it wouldn't compile.  Then I moved the content of
  853.  
  854.  SM> the procedure to the main file(not a unit) and it worked fine.
  855.  
  856.  SM>         Does this mean I can't use Mark and Release in a unit??? Is this
  857.  SM>         a bug?? Am I doing something wrong???
  858.  
  859. Since Mark and Release are in the System unit, you should be able to use them
  860. anywhere.  The most likely thing that went wrong is that your unit uses some
  861. other unit that redefines Mark and Release in a way incompatible with the
  862. standard definition.
  863.  
  864. What error message did you get?
  865.  
  866. --- Msg V3.2
  867.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  868.  * Tossed by SFToss v1.00b on 92/05/19  08:58:30
  869.  
  870. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  871.  
  872. Conference 4
  873. Date       05-18-92 09:07:48
  874. From       Dj Murdoch
  875. To         KEVIN PARADINE
  876. Subject    Re: FEATURES LACKING IN T
  877.  
  878.   >The memory isn't any slower to access...  It is just that you have to
  879.  >deal with the overhead of TP pointers...  For example, if you used
  880.  >MOVEMEM, to different areas of memory (base 640k at least...) there
  881.  >should not be any difference in speed.
  882.  
  883.  KP> Sure there would be.  You'd have to put differing values 
  884.  KP> in the segment registers as opposed to the 64k max model 
  885.  KP> of the stack frame.  Depending on the kind (and size) of 
  886.  KP> moves you made, this could be a significant amount of 
  887.  KP> additional time.   Remember that you are MOVing a maximum 
  888.  KP> of four bytes at a time, and probably less on a 286 or an 
  889.  KP> 8 bit machine.  Every time you move the bytes, you either 
  890.  KP> have to override the default segment or load a new value 
  891.  KP> into the segreg in question.  Either operation incurs 
  892.  KP> overhead, repeated possibly thousands of times, it amounts 
  893.  KP> to a significant delay.
  894.  
  895. You only change the segment registers once at the start, and restore them
  896. at the end.  This lets you move 64K with only one change to the segment register
  897. .  Unless you're talking about moving tiny blocks many times, it's not significa
  898. t.
  899.  
  900. --- Msg V3.2
  901.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  902.  * Tossed by SFToss v1.00b on 92/05/19  08:58:30
  903.  
  904. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  905.  
  906. Conference 4
  907. Date       05-19-92 01:40:36
  908. From       Trevor Carlsen
  909. To         Matt Heck
  910. Subject    sprache
  911.  
  912.  
  913.  
  914.  MH>     If you will notice, your pathetic hi-bit characters DO
  915.  MH> NOT MAKE IT ACROSS THE NET!!! If you can't post in English,
  916.  MH> GET OUTTA FIDONET, PAL!
  917.  
  918. Ok Matt... that does it.
  919.  
  920. You have now been formally warned both directly and also via your sysop at
  921. least TWICE.  The next message (flame, such as above, off-topic etc) that
  922. does not STRICTLY conform to the rules of this echo will see your access withdra
  923. n WITHOUT further notice.
  924.  
  925. Consider this to be your final warning.
  926.  
  927. Trevor Carlsen
  928. Moderator.
  929.  
  930. --- TC-ED   v2.01  
  931.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  932.  * Tossed by SFToss v1.00b on 92/05/19  18:16:05
  933.  
  934. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  935.  
  936. Conference 4
  937. Date       05-19-92 02:36:48
  938. From       Trevor Carlsen
  939. To         Stephane Michaud
  940. Subject    Mark, Release in units
  941.  
  942.  
  943.  
  944.  SM> I made a procedure in turbo pascal 6.0. it's a normal
  945.  SM> procedure wich is in a unit.  In that procedure, it tried to
  946.  SM> use the mark and release functions and it wouldn't compile.
  947.  SM> Then I moved the content of the procedure to the main
  948.  SM> file(not a unit) and it worked fine.
  949.  
  950.  SM> Does this mean I can't use Mark and Release in a unit??? Is
  951.  SM> this a bug?? Am I doing something wrong???
  952.  
  953. As you do not tell us what the compiler error was, it is almost impossible
  954. to help you.  Why not prepare a demonstration so we can intelligently assess
  955. your problem?
  956.  
  957. Mark and Release can be used anywhere.  Perhaps you are using a local variable
  958. as the parameter.  This would only be OK if the Release call occurred within
  959. the same scope.
  960.  
  961. TeeCee
  962.  
  963. --- TC-ED   v2.01  
  964.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  965.  * Tossed by SFToss v1.00b on 92/05/19  18:16:05
  966.  
  967. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  968.  
  969. Conference 4
  970. Date       05-19-92 01:56:47
  971. From       Trevor Carlsen
  972. To         David G. Edwards
  973. Subject    Re: Procedures...
  974.  
  975.  
  976.  
  977.  DG> such "standard" stuff should be done with regular proc's.
  978.  DG> IMO, an exit proc should be as short and "clean" as
  979.  DG> possible.
  980.  
  981.  TC> Why?  TP gives me the tool so I use it.  I have no qualms
  982.  TC> about many different exit procedures - even perhaps one per
  983.  TC> unit if it is justified!
  984.  
  985.  DG> Certainly if it's needed, do it!  Especially if it
  986.  DG> complements initialization code.  I depend on symmetry to
  987.  DG> understand my programs.
  988.  
  989.  DG> On the other hand, if it's not needed, I'd rather cleanup
  990.  DG> not go into an exit proc since they're a little trickier to
  991.  DG> trace into with the IDE.  I think the IDE won't break in an
  992.  DG> exit proc unless a breakpoint is set in the exit proc.  (I
  993.  DG> know-- you don't have the any problems with the IDE since
  994.  DG> you don't use it. :-))
  995.  
  996. The rule-of-thumb I use regarding exit procedures is this - if there is code
  997. that absolutely MUST be executed on program termination regardless of how
  998. that termination is brought about then it goes in an exit procedure.
  999.  
  1000. I do not use it as a convenience as I believe that would be sloppy and lazy
  1001. programming.
  1002.  
  1003. TeeCee
  1004.  
  1005. --- TC-ED   v2.01  
  1006.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1007.  * Tossed by SFToss v1.00b on 92/05/19  18:16:05
  1008.  
  1009. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1010.  
  1011. Conference 4
  1012. Date       05-19-92 02:04:54
  1013. From       Trevor Carlsen
  1014. To         Seamus Venasse
  1015. Subject    TP6.0 Problems
  1016.  
  1017.  
  1018.  
  1019.  SV> I have a question about Turbo Pascal 6.0 regarding use on an
  1020.  SV> 8088. Every time I compile a program to run from the IDE on
  1021.  SV> my Tandy 1000 SX (8088) it works fine.  The program does
  1022.  SV> what it was programmed to do. The problem occurs when the
  1023.  SV> program exits.  It freezes my computer. With the exact same
  1024.  SV> configuration, I cannot duplicate this on my 286 Zenith
  1025.  SV> laptop.  Has anybody else experienced this same problem on
  1026.  SV> an XT, or any other processor for that matter?
  1027.  
  1028. Does it freeze on the Tandy when run as a standalone program rather than from
  1029. the IDE?
  1030.  
  1031. Do the following:
  1032.  
  1033. Make sure that the compiler directive {$G-} is placed at the start of your
  1034. source code.  This ensures that no 80286 code is generated.  It is also the
  1035. default setting when you purchase TP6.
  1036.  
  1037. Turn range checking on. {$R+}
  1038.  
  1039. Recompile and execute... Still a problem?  If yes, then it would appear that
  1040. memory is somehow being overwritten.  Does the program use the heap and/or
  1041. pointers?  Does it use any interrupt routines?  
  1042.  
  1043. Just before termination check that the value of ExitProc has not been changed
  1044. somehow.
  1045.  
  1046.  
  1047. TeeCee
  1048.  
  1049. --- TC-ED   v2.01  
  1050.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1051.  * Tossed by SFToss v1.00b on 92/05/19  18:16:05
  1052.  
  1053. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1054.  
  1055. Conference 4
  1056. Date       05-19-92 03:26:06
  1057. From       Trevor Carlsen
  1058. To         Gordon Tackett
  1059. Subject    Running Bat files from Pascal
  1060.  
  1061.  
  1062.  
  1063.  >      Does anybody know how to run *.BAT files from
  1064.  > Pascal? I am told that EXEC('....' etc.); only runs
  1065.  > *.EXE and *.COM programs. Any suggestions?
  1066.  >      thanx
  1067.  GT> EXEC('C:\COMMAND.COM','/cFILE.BAT');
  1068.  
  1069. What if he doesn't have command.com in the root directory? Or worse, what
  1070. if he doesn't have command.com?
  1071.  
  1072. :-)
  1073.  
  1074. TeeCee
  1075.  
  1076. --- TC-ED   v2.01  
  1077.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1078.  * Tossed by SFToss v1.00b on 92/05/19  18:16:05
  1079.  
  1080. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1081.  
  1082. Conference 4
  1083. Date       05-19-92 08:07:57
  1084. From       Dj Murdoch
  1085. To         John Gohde
  1086. Subject    Re: A Virtuous Pascal ...
  1087.  
  1088.  DM>> Standard Pascal is, in my opinion, a far inferior language DM>> to Turbo
  1089. Pascal. (At least one of the academics I was DM>> talking to agreed with this,
  1090. but didn't see that a first DM>> programming course should teach a useful
  1091. language.)
  1092.  
  1093.  JG> Educational institutions are supposed to teach useful programming
  1094.  JG> styles; NOT  a particular useful  programming language. There  is
  1095.  JG> plenty of time for brand loyalty to develop, later.
  1096.  
  1097. There's no reason that you can't teach good style with a good language rather
  1098. than a bad one.  
  1099.  
  1100.  JG> A college  can teach  COBOL, but  to teach  students that IBM 370
  1101.  JG> COBOL is better than HP 3000 COBOL would be absurd! I fail to see
  1102.  JG> why the same logic would not apply to Pascal.
  1103.  
  1104. I don't know COBOL, but if IBM 370 COBOL is better than HP 3000 COBOL, why
  1105. not teach that?  I'd guess there wouldn't be much difference; COBOL has been
  1106. standardized longer.  The same isn't true of Pascal.  There are large fundamenta
  1107.  differences between Turbo Pascal and Standard Pascal.  In almost all cases
  1108. those make TP a better language, IMHO.  
  1109.  
  1110. Standard Pascal is very well suited to 70's ideas of structured programming,
  1111. but isn't nearly as good at modularity as TP is.  
  1112.  
  1113.  JG> When  you can  not fool  with graphics,  you don't. Narrowing the
  1114.  JG> range of  possiblities simpilies the task  at hand. Simplicity is
  1115.  JG> certainly not a  virture of TP. Nor, is a long  attention spand a
  1116.  JG> common characteristic of todays youth.
  1117.  
  1118. I think instructors who teach standard Pascal have the same contempt for student
  1119.  as you do.  My students are adults; their time is valuable; some of them
  1120. are smarter than I am.  If I think something would be a waste of time for
  1121. me to learn I won't teach it to my students.
  1122.  
  1123.  JG> Further,  the  programming  EXAMPLES  Borland provides absolutely
  1124.  JG> stink  when it  comes to   programming style  (over use  of gobal
  1125.  JG> variables, for one)!
  1126.  
  1127. Why use Borland examples?
  1128.  
  1129.  JG> I can  see some  kid giving  his teacher  this lip: "But, Borland
  1130.  JG> does it this way, why can't I?"
  1131.  
  1132. If one of my students asked me that, I'd tell him/her.  If I couldn't give
  1133. a convincing reason why Borland was wrong, then why shouldn't s/he use that
  1134. style? 
  1135.  
  1136.  
  1137.  
  1138. --- Msg V3.2
  1139.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1140.  * Tossed by SFToss v1.00b on 92/05/20  15:45:09
  1141.  
  1142. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1143.  
  1144. Conference 4
  1145. Date       05-19-92 08:25:37
  1146. From       Dj Murdoch
  1147. To         Markus Schanovsky
  1148. Subject    Re: Problems TPW-Debugger under Win 3.1
  1149.  
  1150.   MS> Dear Mates!
  1151.  MS> Sinve I am running Windows 3.1 the debugger of Turbo-Pascal for
  1152.  MS> Windows does not run - "CANNOT RUN WINDEBUG.DLL".
  1153.  MS> Who can help me?
  1154.  
  1155. Borland has put together some fixes to make it run in 3.1.  Look for TPWN31.*
  1156. on Compuserve, or on a Fidonet node that gets PDN Pascal, or on Internet,
  1157. on garbo.uwasa.fi.
  1158.  
  1159. --- Msg V3.2
  1160.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1161.  * Tossed by SFToss v1.00b on 92/05/20  15:45:09
  1162.  
  1163. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1164.  
  1165. Conference 4
  1166. Date       05-19-92 08:28:38
  1167. From       Dj Murdoch
  1168. To         All
  1169. Subject    TP6BUGS6.ZIP hatched again
  1170.  
  1171.  It looks like something went wrong when I sent out my TP6 bug list a couple
  1172. of weeks ago.  (Thanks to John Giesbrecht for letting me know!)  I've hatched
  1173. another copy to PDN Pascal; I hope it works this time. 
  1174.  
  1175. --- Msg V3.2
  1176.  * Origin: Murdoch's Point: Waterloo, Ontario, Canada (1:221/177.40)
  1177.  * Tossed by SFToss v1.00b on 92/05/20  15:45:09
  1178.  
  1179. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1180.  
  1181. Conference 4
  1182. Date       05-18-92 16:29:50
  1183. From       Mark Ouellet
  1184. To         Paul Farr
  1185. Subject    Re: Why I Like Tp 5.5 Ide
  1186.  
  1187.  
  1188.     On 15 May 92, you, Paul Farr, of 1:348/205.0 wrote...
  1189.  
  1190.  >>You too (about the pains with the search and replace)?  I kept
  1191.  >>complaining about it and not many people agreed with me.  Have you 
  1192.  >> used
  1193.  >>the much better version in TP < 6.0?
  1194.  
  1195.  PF> I'm not sure what you mean, there is a version greater than 6.0 ?
  1196.  
  1197. Paul,
  1198.         < smaller than
  1199.         > greater than
  1200.  
  1201.         Best regards,
  1202.         Mark Ouellet.
  1203.  
  1204.  
  1205.  
  1206. --- ME2
  1207.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1208.  * Tossed by SFToss v1.00b on 92/05/20  15:45:17
  1209.  
  1210. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1211.  
  1212. Conference 4
  1213. Date       05-18-92 16:35:45
  1214. From       Mark Ouellet
  1215. To         Arvel Hathcock
  1216. Subject    Re: Screen Save
  1217.  
  1218.  
  1219.     On 15 May 92, you, Arvel Hathcock, of 1:130/101.0 wrote...
  1220.  
  1221.  AH> I have a question about the screen save code posted a few days ago.
  1222.  AH> 
  1223.  AH> I can't remember who the original poster of the code was so I had to
  1224.  AH> reply to your reply to him/her.  The code was something like:
  1225.  AH> 
  1226.  AH> Var F:File;
  1227.  AH> Begin
  1228.  AH> Assign(F, Filename);
  1229.  AH> Rewrite(F,1);
  1230.  AH> BlockWrite(F, mem[$b800:0],4000);
  1231.  AH> Close(F);
  1232.  AH> end;
  1233.  AH> 
  1234.  AH> I tried this and couldn't make it work.  It created a 4000 byte file
  1235.  AH> on disk which did contain the screen image but when I went to type
  1236.  AH> out the file (TYPE FILENAME.EXT), I got one character printed at a
  1237.  AH> time followed by a beep inbetween each character.
  1238.  
  1239. Arvel,
  1240.         What that file contains is the SCREEN memory which
  1241. contains not only caracters but also the attributes of those
  1242. caracters on the screen. The attributes tells how to display
  1243. the caracter ie: what forground color, background color and
  1244. intensity as well as if it's blinking or not.
  1245.  
  1246.         Since you got bells while typing it I can only
  1247. assume you dumped a Screen with WHITE colored caracters,
  1248. WHITE is color number 7, White caracter on black background
  1249. and 7 is also the ASCII code for a BELL thus you got 1
  1250. caracter, 1 attribute which happened to be white (7) and so
  1251. the bell rang.
  1252.  
  1253.         The screen is settup as 4000 bytes or 2000 pairs of
  1254. caracter/attribute. What you copied to the file was an IMAGE
  1255. of the screen.
  1256.  
  1257.         Best regards,
  1258.         Mark Ouellet.
  1259.  
  1260.  
  1261.  
  1262. --- ME2
  1263.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1264.  * Tossed by SFToss v1.00b on 92/05/20  15:45:18
  1265.  
  1266. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1267.  
  1268. Conference 4
  1269. Date       05-18-92 16:46:37
  1270. From       Mark Ouellet
  1271. To         Greg Smith
  1272. Subject    Re: Soundblaster
  1273.  
  1274.  
  1275.     On 14 May 92, you, Greg Smith, of 1:104/60.0 wrote...
  1276.  
  1277.  DS>>SoundBlaster Hardware Infoamation.
  1278.  DS>>   1)  Digital to Analog Convertor (DAC)
  1279.  DS>>       -  Max sampling rate:24KHz in 8-bit, DMA mode.
  1280.  DS>>   2)  Analog to Digital Convertor (ADC)
  1281.  DS>>       -  Maxsamplingrate:13KHz in DMA mode
  1282.  
  1283.  GS> Do you have any info on the SB Pro?  It's got twice the sampling rate
  1284.  GS> (or 24Khz stereo).  Thanks for the info.
  1285.  
  1286. Greg,
  1287. Yake a look at ATI's STEREO-F/X or better yet their VGA
  1288. Stereo-F/X which I got.
  1289.  
  1290.         VGA card, 1024x768x256
  1291.                    800x600x32k
  1292.                    640x480x32k
  1293.                    800x600x256
  1294.                    etc....
  1295.  
  1296.         Drivers included for WINDOWS, ACAD, ACAD-386 etc...
  1297.  
  1298.         Fully Adlib/SB compatible
  1299.                 STEREO same as SB PRO
  1300.                 MONO 44KHz
  1301.  
  1302.         Comes with VOYETRA's SPjr
  1303.  
  1304.         JoyStick
  1305.         MIDI In, Through, Out
  1306.         LINE/MIC In
  1307.         Speaker Out.
  1308.         Comes with Speakers, MIDI breakout box which brings
  1309.         the VOLUME control to the front of the PC + all the
  1310.         above stated connections.
  1311.  
  1312.         BUS Mouse interface + 3 button mouse.
  1313.  
  1314.         ALL ON A SINGLE CARD, ALL IT LACKS IS THE CD-ROM
  1315.         INTERFACE CONNECTOR OF THE SB-PRO AND FRANKLY, WHO
  1316.         WANTS IT WHEN IT IS KNOWN TO BE COMPATIBLE WITH VERY
  1317.         FEW CD-ROM DRIVES.
  1318.  
  1319.  
  1320.  
  1321. And to get back on topic, it can be programmed in Pascal ;-)
  1322.  
  1323.         Best regards,
  1324.         Mark Ouellet.
  1325.  
  1326.  
  1327.  
  1328. --- ME2
  1329.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1330.  * Tossed by SFToss v1.00b on 92/05/20  15:45:18
  1331.  
  1332. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1333.  
  1334. Conference 4
  1335. Date       05-18-92 17:21:36
  1336. From       Mark Ouellet
  1337. To         Ken Burrows
  1338. Subject    Re: packing bytes
  1339.  
  1340.  
  1341.     On 15 May 92, you, Ken Burrows, of 1:249/201.21 wrote...
  1342.  
  1343.  KB> So, with one donut, you can have 4 states.  1.) Choclate with hole. 
  1344.  KB> 2.)Chocolate without a hole. 3.)Vanilla with a hole.  4.)Vanilla without 
  1345.  
  1346.  KB> a hole. This means that you can represent two distict bytes with only a 
  1347.  
  1348.  KB> single box of 8 doughnuts.
  1349.  KB> 
  1350.  KB> All you have to figure out is how to program a 4 state bit. 
  1351.  
  1352. Well Ken,
  1353.         At last, when the Hot weather hits, the term "CORE
  1354. MELT-DOWN" can apply to computers and not just nuclear
  1355. reactors.
  1356.  
  1357.         Best regards,
  1358.         Mark Ouellet.
  1359.  
  1360.  
  1361.  
  1362. --- ME2
  1363.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1364.  * Tossed by SFToss v1.00b on 92/05/20  15:45:18
  1365.  
  1366. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1367.  
  1368. Conference 4
  1369. Date       05-20-92 00:00:00
  1370. From       Terry Hughes
  1371. To         Jud Mccranie
  1372. Subject    B-Tree Question
  1373.  
  1374.  
  1375. JM>In B-tree filer, a file is indexed on a secondary key.  I want to get
  1376. JM>all records that match a given key (typically 10 or 20).  Right now I'm
  1377. JM>finding the key, getting that record, repeating.  Would it be faster to
  1378. JM>do all of the key finds first (storing the ref numbers) and
  1379.  
  1380. Part of your message got garbled. What I quoted above is all
  1381. I got (that made sense).
  1382.  
  1383. However, I think I know what you're asking: is it faster to
  1384. loop collecting the reference numbers first or do a BTGetRec
  1385. after each BTNextKey? The answer is I don't think it would
  1386. make much of a difference at all. However, there may be some
  1387. advantage to collecting all the reference numbers first. The
  1388. issue is simply DOS buffers or caching issue. As you go
  1389. through the indexes, Filer may or may not have to read new
  1390. index pages in from disk. If it does and the paging
  1391. operation is mixed with the physical I/O required for the
  1392. BTGetRec calls then extra disk movement or caching flushes
  1393. may be required. If you do all the indexing seeking first
  1394. you minimize that possibility.
  1395.  
  1396. If my guess about the question was off just repost and I'll
  1397. try again.
  1398.  
  1399. -Terry
  1400.  
  1401.  
  1402.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  1403.  
  1404. --- Maximus 2.01wb
  1405.  * Origin: The Programmers Playhouse (1:128/60)
  1406.  * Tossed by SFToss v1.00b on 92/05/21  08:06:58
  1407.  
  1408. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1409.  
  1410. Conference 4
  1411. Date       05-20-92 00:00:02
  1412. From       Terry Hughes
  1413. To         Jeroen Pluimers
  1414. Subject    TP6 "bug"
  1415.  
  1416.  
  1417. JP>Hello Terry!
  1418.  
  1419. JP>28 Apr 92, Terry Hughes writes to Trevor Carlsen:
  1420.  
  1421. JP> TH> I assume OPCRT's Delay worked OK?
  1422.  
  1423. JP>Until version 1.11 of OPCRT the DelayMS routine is not
  1424. JP>correct for very fast machines. The DelayMS routine in
  1425. JP>version 1.11 is exactly the same as the one used in TP 6.0.
  1426.  
  1427. JP>I'm not sure if there is a new version of OPRO (this one is
  1428. JP>more than a year old, so I supsect there is) that fixes the
  1429. JP>problem.
  1430.  
  1431. We haven't made any changes to OPRO's Delay routines ever.
  1432. The routines in the current 1.14 version are the same as
  1433. they were back in 1.00. And, as you've noticed, they are
  1434. quite similar the TP6 routines listed in the RTL -- which is
  1435. why I was puzzled when Trevor reported that OPRO's worked
  1436. but TP6's didn't work.
  1437.  
  1438. Surprisingly, when I traced into the TP6 routines I noticed
  1439. those supplied in TURBO.TPL are different from those that
  1440. appear in the CRT.ASM file of the RTL. And those in
  1441. TURBO.TPL will definitely yield a higher "one ms iteration"
  1442. value than ours.
  1443.  
  1444. -Terry
  1445.  
  1446.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  1447.  
  1448. --- Maximus 2.01wb
  1449.  * Origin: The Programmers Playhouse (1:128/60)
  1450.  * Tossed by SFToss v1.00b on 92/05/21  08:06:59
  1451.  
  1452. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1453.  
  1454. Conference 4
  1455. Date       05-20-92 11:06:04
  1456. From       Terry Hughes
  1457. To         Gordon Tackett
  1458. Subject    AsyncPro bug
  1459.  
  1460.  
  1461. GT>Just though you might like to know that oopcom demo program
  1462. GT>has a small bug in it that if fixed will allow the program
  1463. GT>to work with opdrag (at least it did in my limited testing).
  1464. GT>I also removed the ifdef usedrag from ooui. If there is
  1465. GT>anything really stupid in doing this please let me know.
  1466.  
  1467. Thanks. We recently found that inconsistency while we were
  1468. doing some testing with the latest Analyst.
  1469.  
  1470. I didn't write OOPCOM so I don't fully understand the
  1471. rationale behind not allowing UseDrag. I know Rich, the
  1472. author of OOPCOM, started to implement dragging but later
  1473. decided against it. I'll check with him about your changes
  1474. to see if he thinks there might be a potential problem.
  1475.  
  1476. -Terry
  1477.  
  1478.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  1479.  
  1480. --- Maximus 2.01wb
  1481.  * Origin: The Programmers Playhouse (1:128/60)
  1482.  * Tossed by SFToss v1.00b on 92/05/21  08:06:59
  1483.  
  1484. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1485.  
  1486. Conference 4
  1487. Date       05-20-92 11:23:06
  1488. From       Terry Hughes
  1489. To         Bruce Ruona
  1490. Subject    Re: Compression
  1491.  
  1492.  
  1493. BR>I just picked up a copy of it the other day, Primarily for the compression
  1494. BR>ability, however, I was disappointed that yours suffers
  1495. BR>from the same problems I've found in 99% of the compression
  1496. BR>source codes I've looked at, namely lacking the ability to
  1497. BR>store more then one archive per file.  For example, using
  1498. BR>your stream unit to COMPRESS test.lzw *.pas {I Believe I
  1499. BR>have the syntax correct there?}
  1500.  
  1501. If you can't find routines that meet your need anywhere
  1502. else, you might want to know that the compression routines
  1503. that come with our commercial package Async Professional
  1504. include LHARC and ZIP compression routines that are capable
  1505. of storing more than one file per archive (in fact, we use
  1506. the standard LZH and ZIP archive formats).
  1507.  
  1508. -Terry
  1509.  
  1510.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  1511.  
  1512. --- Maximus 2.01wb
  1513.  * Origin: The Programmers Playhouse (1:128/60)
  1514.  * Tossed by SFToss v1.00b on 92/05/21  08:06:59
  1515.  
  1516. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1517.  
  1518. Conference 4
  1519. Date       05-20-92 00:00:08
  1520. From       Terry Hughes
  1521. To         Roger Joelsson
  1522. Subject    16550 chip
  1523.  
  1524.  
  1525. RJ> > Turbo Powers Async Pro has a Unit that does this.  I don't think
  1526.  
  1527. RJ>Do you think I could f'req it from you? Please do send some
  1528. RJ>net-mail about this if it's OK..
  1529.  
  1530. RJ>(I'm in real need of such a 16550 detector, and I've
  1531. RJ>searched here in Sweden, and the above software doesn't
  1532. RJ>seem to be available anywhere here.)
  1533.  
  1534. Async Professional is a commercial package (ours) so no one
  1535. is going to able to send you any parts of it. If you're
  1536. having trouble finding APRO in your area you might want
  1537. to give Grey Matter in England a call (0364-53499). Or you
  1538. can call us at the number below.
  1539.  
  1540. -Terry
  1541.  
  1542.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  1543.  
  1544. --- Maximus 2.01wb
  1545.  * Origin: The Programmers Playhouse (1:128/60)
  1546.  * Tossed by SFToss v1.00b on 92/05/21  08:06:59
  1547.  
  1548. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1549.  
  1550. Conference 4
  1551. Date       05-20-92 00:00:10
  1552. From       Terry Hughes
  1553. To         Seamus Venasse
  1554. Subject    Communications
  1555.  
  1556.  
  1557. SV>Does anybody have any specifications on TurboPower's
  1558. SV>TurboAsync?  The only thing I know about it is that is
  1559. SV>costs $100US.  The kinds of topics I'm looking for are:
  1560.  
  1561. SV>  * Baud support
  1562. SV>  * Comm port accessibility
  1563. SV>  * How many ports can be accessed at a time
  1564. SV>  * Protocol support
  1565. SV>  * Hardware support (handshaking)
  1566. SV>  * Ease of use
  1567.  
  1568. SV>Also, does anybody have a phone number for TurboPower?  The
  1569. SV>number I have, 1-800-830-9934, doesn't even work!  The
  1570. SV>recording says it is invalid...
  1571.  
  1572. APRO supports baud rates 300 through 115K. It supports
  1573. standard COM ports 1 through 8 plus lets you customize port
  1574. addresses for non-standard ports. You can open up to four
  1575. ports simultaneously. It provides the XModem/Ymodem family
  1576. of protocols, Kermit, Zmodem and ASCII. If offers hardware
  1577. flow control on CTS/RTS and/or DTR/DSR in normal or inverted
  1578. states.
  1579.  
  1580. My opinion on the ease of use of APRO is likely to be biased
  1581. since I'm the principal author -- however, most of the
  1582. feedback we get say we've struck a good balance between
  1583. power, flexibility and ease of use.
  1584.  
  1585. You can reach us at the number below or at 800-333-4160.
  1586.  
  1587. -Terry
  1588.  
  1589.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  1590.  
  1591. --- Maximus 2.01wb
  1592.  * Origin: The Programmers Playhouse (1:128/60)
  1593.  * Tossed by SFToss v1.00b on 92/05/21  08:06:59
  1594.  
  1595. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1596.  
  1597. Conference 4
  1598. Date       05-20-92 00:00:12
  1599. From       Terry Hughes
  1600. To         Gordon Tackett
  1601. Subject    Asyncpro
  1602.  
  1603.  
  1604. GT>I looked for the files oobplus and ooxport on you
  1605. GT>bbs...files not found. Could you place them on some BBS
  1606. GT>that is freqable.
  1607.  
  1608. No, but I'll make sure they get put on our BBS. Count on
  1609. them being there after 5/21/92 (my next day in the office).
  1610.  
  1611. -Terry
  1612.  
  1613.  * OLX 2.2 * TurboPower Software (voice 719-260-6641)
  1614.  
  1615. --- Maximus 2.01wb
  1616.  * Origin: The Programmers Playhouse (1:128/60)
  1617.  * Tossed by SFToss v1.00b on 92/05/21  08:06:59
  1618.  
  1619. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1620.  
  1621. Conference 4
  1622. Date       05-20-92 08:05:08
  1623. From       Dj Murdoch
  1624. To         Jud Mccranie
  1625. Subject    Re: Impact Of .Tpu Size O
  1626.  
  1627.   JM> Not so with the CRT unit.  Just add it to USES and it will increase the
  1628.  JM> size of the EXE, even if you don't use anything in the CRT unit.
  1629.  
  1630. Adding a unit to the Uses clause means you're using the initialization section.
  1631.  In CRT, the init section calibrates Delay, does an AssignCRT on input and
  1632. output, and probably some other stuff.  That, together with the fact that
  1633. most of CRT is in one .OBJ block, means you get just about the whole thing
  1634. if you mention it.
  1635.  
  1636. --- Msg V3.2
  1637.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  1638.  * Tossed by SFToss v1.00b on 92/05/21  14:05:04
  1639.  
  1640. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1641.  
  1642. Conference 4
  1643. Date       05-20-92 08:07:44
  1644. From       Dj Murdoch
  1645. To         David G. Edwards
  1646. Subject    Re: Borland, Os/2 2.0, And Yo
  1647.  
  1648.   DG> I've been wondering for some time if the IDE is trashing 
  1649.  DG> my ctrl-break vector.  I do what's described above a lot, 
  1650.  DG> and most of the time it's okay.  But every once in a while 
  1651.  DG> (about twice a week), I'll notice (via a short program to 
  1652.  DG> report it or a system crash) that ctrl-break points to 
  1653.  DG> Never-Never land.  Then again, it may be me or my system.
  1654.  
  1655. I'm *sure* the IDE does nasty things with Ctrl-Break.  If you hit break while
  1656. running in Desqview, you're dead.
  1657.  
  1658. --- Msg V3.2
  1659.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  1660.  * Tossed by SFToss v1.00b on 92/05/21  14:05:04
  1661.  
  1662. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1663.  
  1664. Conference 4
  1665. Date       05-20-92 08:09:03
  1666. From       Dj Murdoch
  1667. To         KEVIN PARADINE
  1668. Subject    Re: packing bytes
  1669.  
  1670.   >Is there any way to pack 2 bytes into one? If they were only like 2
  1671.  >coordinates, would it be possible to crunch them down to one? Some math
  1672.  >alogrythm or something? This would be very helpful.
  1673.  
  1674.  KP> Nope.  You'd need more than 2 bytes to get an effective 
  1675.  KP> dictionary going. And if 2 bytes could be crunched down to 
  1676.  KP> one, someone would have done it already.  The only way it 
  1677.  KP> could work is if there were less than 4 bits of 
  1678.  KP> information in each byte, but even then, how do you 
  1679.  KP> delimit where it comes back apart again?  You don't.
  1680.  
  1681. A Huffman code often puts 2 bytes into one.  If you use a fixed code, you
  1682. won't need to store a dictionary.  If you want to play around with this, pick
  1683. up my Stream13.Zip unit from PDN Pascal, Internet garbo.uwasa.fi:/pc/turbovis/st
  1684. eam13.zip, or possibly BPROGA on Compuserve.
  1685.  
  1686. --- Msg V3.2
  1687.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  1688.  * Tossed by SFToss v1.00b on 92/05/21  14:05:04
  1689.  
  1690. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1691.  
  1692. Conference 4
  1693. Date       05-20-92 08:12:57
  1694. From       Dj Murdoch
  1695. To         Trevor Ripple
  1696. Subject    Re: between integers
  1697.  
  1698.   TR> Okay, I understand a little bit about binary and hex.
  1699.  
  1700.  TR> But, I do not understand how to write a decimal.  Could someone do out
  1701.  TR> pi to 5 decimal points and show me the hex and binary versions?
  1702.  
  1703. There are lots of ways to store Pi, but you can write it fairly easily by
  1704. the following algorithm.
  1705.  
  1706. 1.  Write out the whole number part, and subtract it off.  2.  Write out a
  1707. decimal point.  Loop: 3.  Double the result.  4.  Write out the whole number
  1708. part (either 0 or 1!), and subtract it off.  5.  Go back to 3.
  1709.  
  1710. If I do this on a calculator, I get
  1711.  
  1712.  11.00100 ...
  1713.  
  1714. To get hex, just group the binary in groups of 4 bits:
  1715.  
  1716.  3.2.... 
  1717.  
  1718. A harder question is how these things are stuffed into bytes when you store
  1719. a Real or Double or whatever.  Take a look in the TP Programmer's Guide for
  1720. details on that.
  1721. --- Msg V3.2
  1722.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  1723.  * Tossed by SFToss v1.00b on 92/05/21  14:05:04
  1724.  
  1725. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1726.  
  1727. Conference 4
  1728. Date       05-20-92 08:19:30
  1729. From       Dj Murdoch
  1730. To         Bruce Ruona
  1731. Subject    Re: TVISION RESOURCE Files?
  1732.  
  1733.   BR>  
  1734.  BR> using a turbo vision resource file, would it be possible 
  1735.  BR> to store an object and all its assorted 
  1736.  BR> procedures/constructors/inits/etc within the actual resource file?
  1737.  
  1738. You can't.  Turbo Vision only allows you to put data into resource files,
  1739. not code. 
  1740.  
  1741.  BR> I HAVE been able to store the object in a resource file, 
  1742.  BR> but how do I register the object type, and call the init 
  1743.  BR> procedure without having the type definitions in my main 
  1744.  BR> program--of course having the type definitions, but not 
  1745.  BR> the actual routines in the main program leads to Undefined 
  1746.  BR> forward compiler errors 8-(
  1747.  
  1748. Put the object definition in a unit, and have your main program Use the unit.
  1749.  
  1750.  
  1751. --- Msg V3.2
  1752.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  1753.  * Tossed by SFToss v1.00b on 92/05/21  14:05:05
  1754.  
  1755. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1756.  
  1757. Conference 4
  1758. Date       05-20-92 08:21:32
  1759. From       Dj Murdoch
  1760. To         John Meyers
  1761. Subject    Re: Disk Serial Numbers In dos 5.0
  1762.  
  1763.   JM> Is there a way I can read a volume serial number from a 
  1764.  JM> disk?  I pulled apart the boot sector of a floppy and 
  1765.  JM> found what formated it,the volume label, and the fat type 
  1766.  JM> but not the serial numbers.  I have routines to read and 
  1767.  JM> write volume labels but I need the disk serial number.  Any ideas?
  1768.  
  1769. DOS Service 440D gives it to you.  I posted a how-to message under the subject
  1770. "Reading the boot sector" yesterday.  If you missed it, grab any good DOS
  1771. reference, e.g. Ralf Brown's interrupt list.
  1772.  
  1773. --- Msg V3.2
  1774.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  1775.  * Tossed by SFToss v1.00b on 92/05/21  14:05:05
  1776.  
  1777. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1778.  
  1779. Conference 4
  1780. Date       05-19-92 22:14:46
  1781. From       Mark Ouellet
  1782. To         Gordon Tackett
  1783. Subject    Re: Multiuser databases
  1784.  
  1785.  
  1786.     On 15 May 92, you, Gordon Tackett, of 1:352/777.42 wrote...
  1787.  
  1788.  >> Derek,
  1789.  >>         Take a look at.... OOPS MEMORY LAPS.. what's
  1790.  >> that
  1791.  >> darn flying horse's name..Oh yeah, PEGASUS, full E-
  1792.  >> Mail
  1793.  >> system for NetWare with file enclosure etc... and it's
  1794.  >> free-ware.
  1795.  
  1796.  >>         Best regards,
  1797.  >>         Mark Ouellet.
  1798.  
  1799.  GT> 
  1800.  GT> 
  1801.  GT> I would like to look at this program as well would you know where it is 
  1802.  
  1803.  GT> freqable and what the filename is?
  1804.  
  1805. Gordon,
  1806.         I just had a look at my Binkley logs up to Nov 1990
  1807. and I didn't see it there so it was either before that or I
  1808. got it at the office. In any case I remember seing a newer
  1809. version announced a while back. I should have a copy
  1810. somewhere on my tapes, I'll have a look and let you know.
  1811.  
  1812.         Best regards,
  1813.         Mark Ouellet.
  1814.  
  1815.  
  1816.  
  1817. --- ME2
  1818.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1819.  * Tossed by SFToss v1.00b on 92/05/21  14:05:12
  1820.  
  1821. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1822.  
  1823. Conference 4
  1824. Date       05-19-92 22:22:11
  1825. From       Mark Ouellet
  1826. To         Dj Murdoch
  1827. Subject    Re: Help - Reading Records At
  1828.  
  1829.  
  1830.     On 17 May 92, you, Dj Murdoch, of 1:221/177.40 wrote...
  1831.  
  1832.  DM> I prefer using streams for this sort of thing, because you automatically 
  1833.  
  1834.  DM> get a 1 byte record size, and error checking is easier.
  1835.  
  1836.  DM> I'd use:
  1837.  DM> 
  1838.  DM> My_stream := New(PBufStream, init('Clients.dbf',stOpenRead, 2048));
  1839.  DM> My_stream^.read(My_Header,sizeof(My_header));
  1840.  DM> if My_stream^.status <> stOK then
  1841.  DM> { handle the error }
  1842.  DM> 
  1843.  DM> The advantage of this approach (besides being a little shorter) is that 
  1844.  
  1845.  DM> it's likely to be a lot faster:  you don't get buffered I/O on untyped 
  1846.  
  1847.  DM> files.
  1848.  
  1849.  DM> Watch out here - your Offset_Of_Record is going to be incorrect if it's 
  1850.  
  1851.  DM> out further than 64K.  A safer calculation is
  1852.  DM> 
  1853.  DM> Offset_of_record := sizeof(One_Header) + 
  1854.  DM> LongMul(Record_To_Get*Bytes_To_Read);
  1855.  DM> 
  1856.  DM> A disadvantage is that streams and LongMul are only available in TP 6 
  1857.  
  1858.  DM> and later.
  1859.  
  1860. Thanks for the tip Dj,
  1861.         It does seem interresting allthough I never played
  1862. with Streams yet, thought they looked complicated, your
  1863. example made it look a lot simpler than I thought.
  1864.  
  1865.         Best regards,
  1866.         Mark Ouellet.
  1867.  
  1868.  
  1869.  
  1870. --- ME2
  1871.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1872.  * Tossed by SFToss v1.00b on 92/05/21  14:05:12
  1873.  
  1874. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1875.  
  1876. Conference 4
  1877. Date       05-19-92 23:16:52
  1878. From       Mark Ouellet
  1879. To         Joshua Kersey @ 930/22
  1880. Subject    Re: TSR
  1881.  
  1882.  
  1883.     On 16 May 92, you, Joshua Kersey @ 930/22, of 1:10/8.0 wrote...
  1884.  
  1885.  JK> -/----- Mark Ouellet said to Jason Davies -----\-
  1886.  JK> 
  1887.  MO>>         Well since error #6 is "Bad file handle" I suspect
  1888.  MO>> you open the file during initialisation of the TSR and the
  1889.  
  1890.  JK> I've come across this error before. the Borland help file says "This 
  1891.  
  1892.  JK> error should not occur", yet it DOES! My problem was attempting to open 
  1893.  
  1894.  JK> the file more than once.
  1895.  
  1896. Joshua,
  1897.         it may be so but TSRs are a special case, I would
  1898. suspect the effect is not only to close the file but also to
  1899. clear the handles. That is one reason why people wondered
  1900. for a long time how PRINT did it.
  1901.  
  1902.         When you say your problem was attempting to open the
  1903. file more than once, do you mean without closing it in
  1904. between???
  1905.  
  1906.         Best regards,
  1907.         Mark Ouellet.
  1908.  
  1909.  
  1910.  
  1911. --- ME2
  1912.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1913.  * Tossed by SFToss v1.00b on 92/05/21  14:05:12
  1914.  
  1915. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1916.  
  1917. Conference 4
  1918. Date       05-19-92 23:20:42
  1919. From       Mark Ouellet
  1920. To         Ken Burrows
  1921. Subject    Re: Help - Reading Records At
  1922.  
  1923.  
  1924.     On 16 May 92, you, Ken Burrows, of 1:249/201.21 wrote...
  1925.  
  1926.  KB> My solution, and it is only a suggestion, would be to read in the old 
  1927.  
  1928.  KB> record as is, and then extract whatever info I want from it. 
  1929.  KB> 
  1930.  KB> Type
  1931.  KB> TheRest = Whatever it is that you are reading;
  1932.  KB> OldData = Record
  1933.  KB> trash : Array[1..255] of byte;
  1934.  KB> data  : TheRest;
  1935.  KB> end;
  1936.  KB> 
  1937.  KB> Var
  1938.  KB> InBuffer : OldData;
  1939.  KB> IWant    : TheRest; 
  1940.  KB> 
  1941.  KB> while not eof(thefile) do
  1942.  KB> Begin
  1943.  KB> BlockRead(thefile,InBuffer,SizeOf(InBuffer),result);
  1944.  KB> if Result = SizeOF(InBuffer) then IWant := InBuffer.Data;
  1945.  KB> End;
  1946.  
  1947. Ken,
  1948.         One problem with this is that the Header is NOT
  1949. padded to a record's length thus reading 331 bytes the first
  1950. time will in fact get the 255 bytes of the header + 78 bytes
  1951. from the first record. From that point on your reads and
  1952. writes will allways be offset +/- 78 bytes into the next or
  1953. previous record.
  1954.  
  1955.         Making it a FILE OF <HEADER> or a FILE OF <RECORD>
  1956. does not work since they are of different sizes you will
  1957. never be able to synchronize the reads for subsequent
  1958. records on Record boundaries.
  1959.  
  1960.         That is why you MUST open the file with a 1 byte
  1961. record size to be able to seek to a record taking into
  1962. acount the offset created by the header.
  1963.  
  1964.         Dj did give an elegant use of TP 6.0's Streams to
  1965. achieve this in his reply to me a few messages back.
  1966.  
  1967.         Best regards,
  1968.         Mark Ouellet.
  1969.  
  1970.  
  1971.  
  1972. --- ME2
  1973.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  1974.  * Tossed by SFToss v1.00b on 92/05/21  14:05:12
  1975.  
  1976. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1977.  
  1978. Conference 4
  1979. Date       05-19-92 23:27:51
  1980. From       Mark Ouellet
  1981. To         Seamus Venasse
  1982. Subject    Re: TP6.0 Problems
  1983.  
  1984.  
  1985.     On 15 May 92, you, Seamus Venasse, of 1:17/67.4 wrote...
  1986.  
  1987.  SV> I have a question about Turbo Pascal 6.0 regarding use on an 8088.  
  1988.  SV> Every time I compile a program to run from the IDE on my Tandy 1000 SX 
  1989.  
  1990.  SV> (8088) it works fine.  The program does what it was programmed to do.  
  1991.  
  1992.  SV> The problem occurs when the program exits.  It freezes my computer.  
  1993.  
  1994.  SV> With the exact same configuration, I cannot duplicate this on my 286 
  1995.  
  1996.  SV> Zenith laptop.  Has anybody else experienced this same problem on an XT, 
  1997.  
  1998.  SV> or any other processor for that matter?
  1999.  
  2000. Seamus,
  2001.         Would you by any chance be using an exit procedure
  2002. which is part of a Unit compiled with 286 instructions
  2003. forced on. They will hang on an 8088.
  2004.  
  2005.         You see you said EXACT SAME CONFIGURATION while one
  2006. is an 8088 and the other is a 286 !!! ;-)
  2007.  
  2008.         Best regards,
  2009.         Mark Ouellet.
  2010.  
  2011.  
  2012.  
  2013. --- ME2
  2014.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  2015.  * Tossed by SFToss v1.00b on 92/05/21  14:05:12
  2016.  
  2017. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2018.  
  2019. Conference 4
  2020. Date       05-20-92 00:04:15
  2021. From       Mark Ouellet
  2022. To         Lars Ladingkaer
  2023. Subject    Re: Programming Adlib/Soundblaster [1/6]
  2024.  
  2025.  
  2026.     On 08 May 92, you, Lars Ladingkaer, of 2:234/97.5 wrote...
  2027.  
  2028.  LL> Hello All!
  2029.  LL> 
  2030.  LL> Many of you have asked for some docs on how to program 
  2031.  LL> Adlib/Soundblaster.
  2032.  LL> This will help with the low-level programming of the cards.
  2033.  LL> Note: There are 6 messages!
  2034.  LL> 
  2035.  LL> ============================== cut here 
  2036.  LL> ====================================
  2037.  
  2038. Lars,
  2039.         Same thing here, only 1, 4 & 6 made it through.
  2040.  
  2041.         Best regards,
  2042.         Mark Ouellet.
  2043.  
  2044.  
  2045.  
  2046. --- ME2
  2047.  * Origin: One BEER gets me drunk.... usualy the 47th ;-) (Fidonet 1:240/1.4)
  2048.  * Tossed by SFToss v1.00b on 92/05/21  14:05:12
  2049.  
  2050. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2051.  
  2052. Conference 4
  2053. Date       05-21-92 01:11:18
  2054. From       Trevor Carlsen
  2055. To         Dave Blaser
  2056. Subject    Overlay files?!
  2057.  
  2058.  
  2059.  
  2060.  TC> You do not say which TP version you own.  If TP4 then you
  2061.  TC> are out of luck as there are no overlays in that version.
  2062.  TC> If you own later versions then the manual contains a
  2063.  TC> complete chapter with a full explanation of what is
  2064.  TC> required.  So maybe you should RTFM!
  2065.  
  2066.  DB> Sorry, I've got TurboPascal v6.0, oh and I can't RTFM due to the fact 
  2067.  
  2068.  DB> that the gentlemen who gave me the TurboPascal 6.0 disks, had lost the 
  2069.  
  2070.  DB> manual for it.  
  2071.  
  2072. *IF* you have a legal copy, phone Borland to order a replacement.
  2073.  
  2074. TeeCee
  2075.  
  2076.  
  2077.  
  2078. --- TC-ED   v2.01  
  2079.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2080.  * Tossed by SFToss v1.00b on 92/05/21  19:06:33
  2081.  
  2082. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2083.  
  2084. Conference 4
  2085. Date       05-21-92 02:02:53
  2086. From       Trevor Carlsen
  2087. To         James Cook
  2088. Subject    Re: Pascal style #2
  2089.  
  2090.  
  2091.  
  2092.  JC> I think when this question was originally posed, the poser didn't want 
  2093.  
  2094.  JC> size or speed of execution to be taken into account.  I have to admit, 
  2095.  
  2096.  JC> there are situations where the tighter code may be harder to read (ie 
  2097.  
  2098.  JC> Example 3), but most of us write our own source and re-write our own 
  2099.  
  2100.  JC> source.  I guess what I'm trying to say is, even though TeeCee's 
  2101.  JC> semi-cryptic if-then incarnation, as long as he is the only one 
  2102.  JC> editing his code and he uses this construct quite often, there is no 
  2103.  
  2104.  JC> harm!
  2105.  
  2106.  JC>   Example A:
  2107.  JC>         X := 1;
  2108.  JC>         If Y > 10 then X := 2;
  2109.  
  2110.  JC>   Example B: (this would be the one I use and the indentation I 
  2111.  JC> prefer)
  2112.  JC>         If Y > 10 then X := 2
  2113.  JC>                   else X := 1;
  2114.  
  2115.  JC>   Example C:
  2116.  JC>         X := Succ (Ord (Y > 10));
  2117.  
  2118.  JC>         Example A               Example B               Example C
  2119.  JC>          19 bytes                21 bytes                14 bytes
  2120.  
  2121. Your comments are closer to the mark than any of the others in regards to
  2122. Example C.  Without exception the criticism of that method is the fact that
  2123. it is harder to understand.  I agree - but an important fact seems to be overloo
  2124. ed, that is, if it is the best on all counts except readability then there
  2125. should be no problem, as that is one of the reasons we have comments.
  2126. So -
  2127.  
  2128.    x := succ(ord(Y > 10);  { if y > 10 then x := 2 else x := 1; }
  2129.  
  2130. Any code that may be hard to understand should be commented in such a way
  2131. so as to make it easier to understand.  In a team or commercial environment
  2132. that is an iron clad rule.  When two coding methods have no difference in
  2133. speed or size efficiency *then* IMHO the more cryptic version should be discarde
  2134.  in favour of the more readable.
  2135.  
  2136.  
  2137. TeeCee
  2138.  
  2139. --- TC-ED   v2.01  
  2140.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2141.  * Tossed by SFToss v1.00b on 92/05/21  19:06:33
  2142.  
  2143. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2144.  
  2145. Conference 4
  2146. Date       05-21-92 01:51:55
  2147. From       Trevor Carlsen
  2148. To         Lars Ladingkaer
  2149. Subject    Programming Adlib/Soundblaster [1/6]
  2150.  
  2151.  
  2152.  
  2153.  > Note: Reposted due to some unknown errors in the link.
  2154.  
  2155. Lars, you can repost these messages until doomsday!  As it stands many systems
  2156. will ALWAYS miss out on two or three of them because they will have been discard
  2157. d as dupes somewhere along the line.
  2158.  
  2159. When posting multiple message sequences it is important that the "[1/6]" "[2/6]"
  2160. etc portion of your subject line be placed first, not last, on that line.
  2161.  Many dupe detectors only look at the first 20 or 30 characters of the subject
  2162. line and if two messages can be processed within the same clock tick by your
  2163. mailer, then they get the same MSGID or EID number and never make it into
  2164. the net, or if they do, are discarded somewhere along the line.
  2165.  
  2166. BTW only numbers 1,2 and 5 made it this time!
  2167.  
  2168. TeeCee
  2169.  
  2170. --- TC-ED   v2.01  
  2171.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2172.  * Tossed by SFToss v1.00b on 92/05/21  19:06:33
  2173.  
  2174. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2175.  
  2176. Conference 4
  2177. Date       05-21-92 01:54:50
  2178. From       Trevor Carlsen
  2179. To         Brian Stark
  2180. Subject    RE: UNIX STYLE TIMESTAMP
  2181.  
  2182.  
  2183.  
  2184.  > Having said that, the above function is incorrect!  It should read 
  2185.  
  2186.  > IsLeapYear := ((Source mod 4 = 0) and (Source mod 100 <> 0)) or 
  2187.  >               (Source mod 400 = 0);
  2188.  BS> Are you sure?? The function was given to me by a college professor 
  2189.  BS> (gulp).
  2190.  
  2191. Yes I am sure!  :-)  However as I pointed out, it is really only of academic
  2192. interest as using longints for unix timestamps can only be valid for the years
  2193. 1970-2038 anyway and therefore all years between those two dates that are
  2194. divisible by 4 are leap years.
  2195.  
  2196. TeeCee
  2197.  
  2198. --- TC-ED   v2.01  
  2199.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2200.  * Tossed by SFToss v1.00b on 92/05/21  19:06:33
  2201.  
  2202. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2203.  
  2204. Conference 4
  2205. Date       05-18-92 20:35:00
  2206. From       Norbert Igl
  2207. To         Paul Bamford
  2208. Subject    Direct Addressing of Video Memory. A cry
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214. {> I am currently trying to write a Turbo Pascal program which performs
  2215.  > the following tasks:
  2216.  
  2217.  > (1) Get the address for video memory;}
  2218.  
  2219.    uses crt;
  2220.    var base : word;
  2221.        VidPtr : pointer;
  2222.        ScrFil : file;
  2223.    begin
  2224.      if lastmode = 7
  2225.         then base := $B000    { mono }
  2226.         else base := $b800;   { colour }
  2227. { > (2) Convert this address to a pointer;}
  2228.         VidPtr := Ptr(Base, 0);
  2229. { > (3) Copy the contents of the screen to a file of whatever type }
  2230. { >     corresponds to the pointer assigned to the video address;}
  2231.        Assign(ScrFil, 'Save.Scr');
  2232.        Rewrite(ScrFil, 1);
  2233.        BlockWrite(ScrFil, VidPtr^, 4000 );  { 4000 = 80x25x2 (Chr+Att)}
  2234.        Close(ScrFil);
  2235.  
  2236.        ClrScr; { say what...}
  2237.  
  2238. { > (4) At a later stage, copy the file contents back to screen. }
  2239.  
  2240.        Reset(ScrFil,1);
  2241.        BlockRead(ScrFil, VidPtr^, 4000);
  2242.        Close(ScrFil);
  2243.     end.
  2244.    ... any questions left ? (:-))
  2245.  
  2246. Bye from Germany, Norbert
  2247.  
  2248.  
  2249.  
  2250. ---
  2251.  * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  2252.  * Tossed by SFToss v1.00b on 92/05/22  11:06:31
  2253.  
  2254. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2255.  
  2256. Conference 4
  2257. Date       05-21-92 21:52:00
  2258. From       Norbert Igl
  2259. To         Gerald Gutierrez
  2260. Subject    Detecting ANSI ?
  2261.  
  2262.  
  2263.  
  2264.  
  2265.  
  2266. Hi Gerald....
  2267.  
  2268. Function AnsiSysInstalled: boolean;
  2269. var _AX: word;
  2270. begin
  2271.   asm  mov ax, $1a00
  2272.        int 2f
  2273.        mov _ax, ax
  2274.   end;
  2275.   ANSISsyInstalled := Lo(_AX) = $FF
  2276. end;
  2277.  
  2278.  
  2279. Bye from Germany, Norbert
  2280.  
  2281. ---
  2282.  * Origin: STOP READING! You're leaving the MSG-sector (2:241/5300.3)
  2283.  * Tossed by SFToss v1.00b on 92/05/22  11:06:31
  2284.  
  2285. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2286.  
  2287. Conference 4
  2288. Date       05-22-92 02:17:36
  2289. From       Trevor Carlsen
  2290. To         Jud Mccranie
  2291. Subject    Re: The Function "Pos"
  2292.  
  2293.  
  2294.  
  2295.  JL>> It's not good to assign the value to the function until the
  2296.  JL>> end of the function, therefore it would be better to use a
  2297.  JL>> tempstr and assign upstring to tempstr outside of the loop.
  2298.  TC> I'm willing to listen to arguments on your reasoning but just
  2299.  TC> making such a statement without a reason does nothing to
  2300.  TC> convince me! Why is it not good?
  2301.  
  2302.  JM> In this case, it doesn't matter much, but I think he has a point in
  2303.  JM> general.  Without using a temp variable for the function value, you
  2304.  JM> can't reference it within the function:
  2305.  
  2306.  JM> funciton f : string;
  2307.  JM> begin
  2308.  JM> f := '';
  2309.  JM> ....
  2310.  JM> if f ....
  2311.  JM> end;
  2312.  
  2313. That's fine and I agree with you but it had no relevance to the function I
  2314. demonstrated and that is why I queried the statement.  Observing some GPP
  2315. just because something might happen when the nature of the code in question
  2316. makes that something impossible is of questionable logic to say the least.
  2317.  
  2318. TeeCee
  2319.  
  2320. --- TC-ED   v2.01  
  2321.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2322.  * Tossed by SFToss v1.00b on 92/05/23  08:20:33
  2323.  
  2324. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2325.  
  2326. Conference 4
  2327. Date       05-22-92 05:27:02
  2328. From       Trevor Carlsen
  2329. To         Joy Mukherjee
  2330. Subject    C conversion / V7 NodeL.
  2331.  
  2332.  
  2333.  
  2334.  JM> function CompAddress (ALine, Desire : Str160; L : Byte) : Integer;
  2335.  
  2336.  JM> label 99;
  2337.  
  2338.  JM> type
  2339.  JM>     NodeType = record
  2340.  JM>         Len   : Byte;
  2341.  JM>         Zone  : Word;
  2342.  JM>         Net   : Word;
  2343.  JM>         Node  : Word;
  2344.  JM>         Point : Word;
  2345.  JM>      end;
  2346.  
  2347.  JM> var
  2348.  JM>     Key     : NodeType absolute ALine;
  2349.  JM>     Desired : NodeType absolute Desire;
  2350.  JM>     K       : Integer;
  2351.  
  2352.  JM> begin
  2353.  JM>     Word (K) := Key.Zone - Desired.Zone;
  2354.  JM>     If K <> 0 then goto 99;
  2355.  JM>     Word (K) := Key.Net - Desired.Net;
  2356.  JM>     If K <> 0 then goto 99;
  2357.  JM>     Word (K) := Key.Node - Desired.Node;
  2358.  JM>     If K <> 0 then goto 99;
  2359.  JM>     If L = 6 then Key.Point := 0;
  2360.  JM>     Word (K) := Key.Point - Desired.Point;
  2361.  JM> 99:
  2362.  JM>     CompAddress := K;
  2363.  JM> end;
  2364.  
  2365.  JM> Egad!  It uses a GOTO!!!!  Before I get the usual hatemail and the 
  2366.  JM> like, I would like your opinion on the best way to either avoid the 
  2367.  JM> GOTO or rewrite the procedure.  In C, (and I apologize to all for the 
  2368.  
  2369.  JM> obCenities in this message) the line is similar to :
  2370.  
  2371.  JM> if (k) return (k)
  2372.  
  2373.  JM> Since there is no Pascal equivalent to a return command, what 
  2374.  JM> alternatives do I have???
  2375.  
  2376.  JM> Next, notice the type casting in the above.  With range checking on 
  2377.  JM> and without the typecast, this will result in an RunTime Error 201.  
  2378.  
  2379.  JM> Why is this??  K is defined as an integer, and the result of two words 
  2380.  
  2381.  JM> being subtracted will often result in a negative, so why will it error 
  2382.  
  2383.  JM> out?
  2384.  
  2385. With a couple of minor changes this becomes a natural for recursion. You don't
  2386. define just what a type str160 is so this can be done by making the first
  2387. two paramters untyped and thus you could call the function so -
  2388.  
  2389.   Whatever := CompAddress( ptr(seg(var1),ofs(var1)+1)^
  2390.                            ptr(seg(var2),ofs(var2)+1)^, L, 0);
  2391.  
  2392. If the first two paramters are strings then the pointer contortions can give
  2393. way to -
  2394.  
  2395.   Whatever := CompAddress(var1[1],var2[1],L,0);
  2396.  
  2397. Here is the function as I would suggest you write it - 
  2398.  
  2399. function CompAddress (var ALine, Desire; L,count : Byte) : Integer;
  2400.  
  2401.   type
  2402.     NodeType = record
  2403.                  FirstWord,
  2404.                  NextWord   : word;
  2405.                end;
  2406.   var
  2407.     Key     : NodeType absolute ALine;
  2408.     Desired : NodeType absolute Desire;
  2409.  
  2410.   begin {$R-}
  2411.     if (Key.First = Desired.FirstWord) and (count <  3) then begin
  2412.       inc(count)
  2413.       CompAddress(Key.NextWord,Desired.NextWord,L,count);
  2414.     end else begin
  2415.       count := 3;
  2416.       If L = 6 then
  2417.         Key.FirstWord := 0;
  2418.     end;
  2419.     CompAddress := Key.FirstWord - Desired.FirstWord;
  2420.     {$R+}
  2421.   end;
  2422.  
  2423. Initially call with the third parameter set at zero.  Obviously untested,
  2424. although I think it should work, and as written above would require extended
  2425. syntax (TP6 only).
  2426.  
  2427. The reason you were getting range check errors was because there must be occasio
  2428. s happening when the possible return value of the subtraction was outside
  2429. the bounds for an integer.  
  2430.  
  2431. TeeCee
  2432.  
  2433. --- TC-ED   v2.01  
  2434.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2435.  * Tossed by SFToss v1.00b on 92/05/23  08:20:33
  2436.  
  2437. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2438.  
  2439. Conference 4
  2440. Date       05-22-92 04:01:04
  2441. From       Trevor Carlsen
  2442. To         Florian Stupperich
  2443. Subject    HELP! CRT - Window() replacement
  2444.  
  2445.  
  2446.  
  2447.  > There is nothing that stops you from using write/writeln in a
  2448.  > window.  In fact that is all you can use if you want to remain
  2449.  > inside the window co-ordinates.  Perhaps I am misunderstanding
  2450.  > what it is that you seek?
  2451.  
  2452.  FS> i will use ANSI also, so that a can't use the CRT-Unit, that is
  2453.  FS> the problem. Do you have any idee ?
  2454.  
  2455. Then you have to parse the ANSI control sequences and change the attributes
  2456. as required before doing a write.  This is fairly complex and there are units
  2457. that will do this for you.  Look for a file called PANSI*.* on a BBS near you.
  2458.  
  2459.  
  2460. TeeCee
  2461.  
  2462. --- TC-ED   v2.01  
  2463.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2464.  * Tossed by SFToss v1.00b on 92/05/23  08:20:33
  2465.  
  2466. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2467.  
  2468. Conference 4
  2469. Date       05-22-92 04:32:44
  2470. From       Trevor Carlsen
  2471. To         Josh Lippy
  2472. Subject    Re: fsearch();
  2473.  
  2474.  
  2475.  
  2476.  JL> {$I-}
  2477.  JL> reset(infile);
  2478.  JL> {$I+}
  2479.  JL> if(ioresult <> 0) then begin
  2480.  JL>   writeln('Error opening file.');
  2481.  JL>   halt(1);
  2482.  JL>   end
  2483.  JL> else
  2484.  JL>   writeln('Open successful, continuing.');
  2485.  
  2486.  JL> Turning I/O checking off allows you to check to see if the open 
  2487.  JL> worked, ...
  2488.  
  2489. True...
  2490.  
  2491.  JL> ... then you  turn it back on to use the file.  ...
  2492.  
  2493. This can be done but it is better to leave it off and check IOResult after
  2494. each I/O operation.
  2495.  
  2496.  JL> ... It's not truly reset when I/O checking is off,
  2497.  JL> so you still need to reset() once you get ready to 
  2498.  JL> process.
  2499.  
  2500. This is incorrect.  If the reset worked, regardless of whether I/O checking
  2501. is on or off, file operations can commence without another reset.  All the
  2502. compiler directive {$I-} does is prevent  the generation of I/O error checking
  2503. code at compile time and thus at run-time, if an I/O error occurs,the program
  2504. continues on its merry way without generating a run-time error.  Because of
  2505. this it is imperative that the programmer check the IOResult function after
  2506. each I/O operation that could generate an error, in order to determine if
  2507. an error occurred and, if so, take appropriate action.
  2508.  
  2509. TeeCee
  2510.  
  2511. --- TC-ED   v2.01  
  2512.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2513.  * Tossed by SFToss v1.00b on 92/05/23  08:20:33
  2514.  
  2515. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2516.  
  2517. Conference 4
  2518. Date       05-22-92 04:09:13
  2519. From       Trevor Carlsen
  2520. To         Josh Lippy
  2521. Subject    Re: HangUp
  2522.  
  2523.  
  2524.  
  2525.  JM> I have your HangUp ultil for Tg and I noticed a problem...
  2526.  
  2527.  JL> HangUp is supposed to be run as an event...
  2528.  
  2529. This is unrelated to the conference topic.  Take it to netmail.
  2530.  
  2531. Trevor Carlsen
  2532. Moderator.
  2533.  
  2534. --- TC-ED   v2.01  
  2535.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2536.  * Tossed by SFToss v1.00b on 92/05/23  08:20:33
  2537.  
  2538. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2539.  
  2540. Conference 4
  2541. Date       05-22-92 04:13:59
  2542. From       Trevor Carlsen
  2543. To         Fred Burgess
  2544. Subject    TG Source
  2545.  
  2546.  
  2547.  
  2548.  FB> I have the TG-X code and it compiled.  Maybe you got a copy that 
  2549.  FB> somebody else hacked.  I also have the 2.5g code.  2.5j was never 
  2550.  FB> released, not even the EXE was released.  Telegard 2.5k was released 
  2551.  
  2552.  FB> as a beta only, and they hacked the EXE's.  Not nice.  Anyway, back on 
  2553.  
  2554.  FB> topic, the source out right now for TG is 2.5g and 1.6a.  Rumor has it 
  2555.  
  2556.  FB> the 2.7 is out, but I think that it's 2.5i hacked more.
  2557.  
  2558. I fail to see how you are "back on topic".  Discuss this by netmail please
  2559. or take the thread to an appropriate conference.  The subject matter of this
  2560. conference is Pascal.
  2561.  
  2562. Trevor Carlsen
  2563. Moderator.
  2564.  
  2565. --- TC-ED   v2.01  
  2566.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2567.  * Tossed by SFToss v1.00b on 92/05/23  08:20:33
  2568.  
  2569. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2570.  
  2571. Conference 4
  2572. Date       05-22-92 06:51:05
  2573. From       Trevor Carlsen
  2574. To         Bruce Ruona
  2575. Subject    Re: Compression
  2576.  
  2577.  
  2578.  
  2579.  BR> Yes, normally I would use a third party compression utility, except in 
  2580.  
  2581.  BR> this case I'm attempting to use the compression as part of my data 
  2582.  BR> security routines as well as reducing data size (of course!) for a 
  2583.  BR> clients system for transferring daily sales figures between offices.  
  2584.  
  2585.  BR> using a third party compression routine would still give the client 
  2586.  BR> possible access to the raw data.  Note that I did NOT program the 
  2587.  BR> software that generates the data, I'm just assisting in transferring 
  2588.  
  2589.  BR> the data, so I can NOT add a simple data encryption routine.
  2590.  
  2591. Because this type of application tends to have a similar format every day,
  2592. the ideal way to do this is to create a token table with all the commonly
  2593. used phrases and reports replaced by tokens.  The actual data be easily incorpor
  2594. ted into this and then the whole thing is reversed at the receiving end.
  2595.  
  2596. TeeCee
  2597.  
  2598. --- TC-ED   v2.01  
  2599.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2600.  * Tossed by SFToss v1.00b on 92/05/23  08:20:33
  2601.  
  2602. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2603.  
  2604. Conference 4
  2605. Date       05-22-92 17:18:43
  2606. From       Trevor Carlsen
  2607. To         Robert Johnston
  2608. Subject    Quick Question
  2609.  
  2610.  
  2611.  
  2612.  RJ> I have tried this MANY times before.  I have moved EVERYTHING
  2613.  RJ> that I could into the TPU  NUKEWARS.PAS  (overlay)  but the rest
  2614.  RJ> interfaces with my DATA FILES
  2615.  
  2616. Create a globals unit and have every unit that needs access to the global
  2617. variables in that unit use it.  eg
  2618.  
  2619. unit globals;
  2620.  
  2621. interface
  2622.  
  2623. var
  2624. ...place all your global variables here.
  2625.  
  2626. implementation
  2627.  
  2628. end.
  2629.  
  2630. Then place the line "uses globals; "  in all the units your program uses that
  2631. need acces to any of the variables in globals.
  2632.  
  2633.  
  2634. TeeCee
  2635.  
  2636. --- TC-ED   v2.01  
  2637.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2638.  * Tossed by SFToss v1.00b on 92/05/23  08:20:34
  2639.  
  2640. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2641.  
  2642. Conference 4
  2643. Date       05-22-92 17:26:50
  2644. From       Trevor Carlsen
  2645. To         Mike Copeland
  2646. Subject    TP Smart Linking
  2647.  
  2648.  
  2649.  
  2650.  MC> Smart Linking - to the effect that variables "grouped" under a "Var" 
  2651.  
  2652.  MC> statement are not culled out if they aren't referenced.  Does that 
  2653.  MC> mean (in the extreme case) that putting a "Var" on _every_ variable in 
  2654.  
  2655.  MC> a global data unit will produce the minimum-sized object EXE program?  
  2656.  
  2657.  MC> And that a _single_ "Var" will in turn not reduce the program variable 
  2658.  
  2659.  MC> space at all?
  2660.  
  2661. Look up "Smart linking" in your manual.  
  2662.  
  2663. "The removal of unused code takes place on a per procedure basis; the removal
  2664. of unused data takes place on a per declaration section basis."
  2665.  
  2666. Also:
  2667.  
  2668. "When compiling to memory, Turbo Pascal's smart linker is disabled. This explain
  2669.  why some programs become smaller when compiled to disk."
  2670.  
  2671. Another point to remember is that any reference to code or data in an .obj
  2672. file that is needed in any unit results in ALL the code and data from that
  2673. unit being linked in, regardless of whether or not it is used.  This explains
  2674. why the crt unit adds so much code to any program as it has one const declaratio
  2675.  section, one var declaration section and only one .obj file that ALL the
  2676. procedures and functions appear in.  The initialisation section then uses
  2677. one of those procedures (AssignCRT) and so the whole lot gets linked in.
  2678.  
  2679. TeeCee
  2680.  
  2681. --- TC-ED   v2.01  
  2682.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  2683.  * Tossed by SFToss v1.00b on 92/05/23  08:20:35
  2684.  
  2685. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2686.  
  2687. Conference 4
  2688. Date       05-22-92 08:18:44
  2689. From       Dj Murdoch
  2690. To         Mike Copeland
  2691. Subject    Re: Pascal style #2
  2692.  
  2693.   MC>    The most important thing, I believe, is to have a consistent style.
  2694.  
  2695. That's so true.  I think it's so important that I develop a new consistent
  2696. style about every 6 months :-).
  2697.  
  2698. --- Msg V3.2
  2699.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  2700.  * Tossed by SFToss v1.00b on 92/05/23  08:21:05
  2701.  
  2702. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2703.  
  2704. Conference 4
  2705. Date       05-22-92 08:20:07
  2706. From       Dj Murdoch
  2707. To         Jud Mccranie
  2708. Subject    Re: Pascal Style #2
  2709.  
  2710.   JM> You could have
  2711.  
  2712.  JM>   x := 9999 * ord( y <= 0) + 1
  2713.  
  2714.  JM> but that is the sort of thing I did 10 years ago when I thought I was
  2715.  JM> being so clever.  Sure, it gets it on one card (line), but it is hard
  2716.  JM> for the programmer to read, understand, or modify.  The programmer can
  2717.  JM> look at the first and see immediately what is happening.  In the second
  2718.  
  2719. APL programmers wouldn't blink an eye when they saw that.  They'd think they're
  2720. back home!
  2721.  
  2722. --- Msg V3.2
  2723.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  2724.  * Tossed by SFToss v1.00b on 92/05/23  08:21:05
  2725.  
  2726. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2727.  
  2728. Conference 4
  2729. Date       05-22-92 08:23:12
  2730. From       Dj Murdoch
  2731. To         Greg Smith
  2732. Subject    Re: Impact Of .Tpu Size O
  2733.  
  2734.   GS> That's because of the CRT unit's initialization code.  It includes some
  2735.  GS> code right there to calabrate the delay procedure etc.. Plus the input
  2736.  GS> and output file variables along with their supporting procedures are
  2737.  GS> included since they're assigned in the init code.  Not all of the unit
  2738.  GS> is linked in, however, the parts which are obviously not used are left
  2739.  GS> out.  (That's why "smart" is in quotes, it's better than nothing but is
  2740.  
  2741.  GS> still pretty dumb).
  2742.  
  2743. With the CRT unit, that's not true.  It only has two code blocks:  the initializ
  2744. tion section, and everything else.  Since the init code references some of
  2745. the other stuff, you get the whole shebang when you put CRT in your Uses list.
  2746.  
  2747.  
  2748.  
  2749. --- Msg V3.2
  2750.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  2751.  * Tossed by SFToss v1.00b on 92/05/23  08:21:05
  2752.  
  2753. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2754.  
  2755. Conference 4
  2756. Date       05-22-92 08:26:26
  2757. From       Dj Murdoch
  2758. To         Mark Ouellet
  2759. Subject    Re: Help - Reading Records At
  2760.  
  2761.   DM> Watch out here - your Offset_Of_Record is going to be 
  2762.  MO> incorrect if it's 
  2763.  DM> out further than 64K.  A safer calculation is
  2764.  DM> 
  2765.  DM> Offset_of_record := sizeof(One_Header) + 
  2766.  DM> LongMul(Record_To_Get*Bytes_To_Read);
  2767.  
  2768. Oops, I made a typo there - that should be 
  2769.  
  2770.   LongMul(Record_To_Get,Bytes_To_Read)
  2771.  
  2772.  MO> Thanks for the tip Dj,
  2773.  MO>         It does seem interresting allthough I never played
  2774.  MO> with Streams yet, thought they looked complicated, your
  2775.  MO> example made it look a lot simpler than I thought.
  2776.  
  2777. I think the manual makes them look unnecessarily complicated.  If you skip
  2778. over the object registration and Put and Get, they're really no more complicated
  2779. than any other binary file.
  2780.  
  2781. --- Msg V3.2
  2782.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  2783.  * Tossed by SFToss v1.00b on 92/05/23  08:21:05
  2784.  
  2785. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2786.  
  2787. Conference 4
  2788. Date       05-22-92 08:32:25
  2789. From       Dj Murdoch
  2790. To         Mike Copeland
  2791. Subject    Re: TP Smart Linking
  2792.  
  2793.   MC>    Dj, a few weeks ago you posted a statement about 
  2794.  MC> variables and Smart Linking - to the effect that variables 
  2795.  MC> "grouped" under a "Var" statement are not culled out if 
  2796.  MC> they aren't referenced.  Does that mean (in the extreme 
  2797.  MC> case) that putting a "Var" on _every_ variable in a global 
  2798.  MC> data unit will produce the minimum-sized object EXE 
  2799.  MC> program?  And that a _single_ "Var" will in turn not 
  2800.  MC> reduce the program variable space at all?
  2801.  MC>    I haven't tried it yet, and I'm thinking of doing so.  
  2802.  MC> It seems to me (if this is true) that an intelligent 
  2803.  MC> reordering of variables in a global unit would benefit 
  2804.  MC> most programs which use it.  Is that right?
  2805.  MC>    Constants, too?
  2806.  
  2807. I think that's usually a good idea.  You might find that linking slows down,
  2808. you'll certainly find that your .TPU gets bigger, but generally your program
  2809. should use less data segment space if you group both global Var declarations
  2810. and typed Const declarations according to usage.
  2811.  
  2812. You can take it too far, though.  If you're really tight for space, you might
  2813. use $A- to turn off word alignment.  However, Var and Const blocks are *always*
  2814. word aligned.  For example:
  2815.  
  2816.   Var
  2817.     b : byte;
  2818.     w : word;
  2819.  
  2820. would take up 4 bytes with $A+, but only 3 bytes with $A-.  However,
  2821.  
  2822.   Var
  2823.     b : byte;
  2824.   Var
  2825.     w : word;
  2826.  
  2827. would always take up 4 bytes regardless of alignment.
  2828.  
  2829. My own practice (when I think of it) is to group variables by functionality.
  2830.  If I have several variables that are all dealing with the same issue, I'll
  2831. put them in one block.  If some other variables serve a different purpose,
  2832. they go in a different block.  Then I can pick or choose functions from the
  2833. Unit and only get the variables that matter.
  2834.  
  2835. I didn't quite follow this rule in my Streams unit, which is a real mishmash
  2836. of different functions.  There I was very careful to separate declarations
  2837. so that you get the minimum allocation.  This makes the source code pretty
  2838. ugly in some places; for example:
  2839.  
  2840. const 
  2841.   ForSpeed : TStreamRanking = (RAMStream, EMSStream, XMSStream, FileStream);
  2842.   { Streams ordered for speed }
  2843.  
  2844. const 
  2845.   ForSize : TStreamRanking = (FileStream, EMSStream, XMSStream, RAMStream);
  2846.   { Streams ordered for low impact on the heap }
  2847.  
  2848. const 
  2849.   ForSizeInMem : TStreamRanking = (EMSStream, XMSStream, RAMStream, NoStream); 
  2850.  
  2851.   { Streams in memory only, ordered as #ForSize#. }
  2852.  
  2853. const 
  2854.   ForOverlays : TStreamRanking = (EMSStream, XMSStream, FileStream, NoStream); 
  2855.  
  2856.   { Streams ordered for speed, but never in RAM. }
  2857.  
  2858. The typical user would only need one of these constants, so they're all in
  2859. separate blocks.
  2860.  
  2861.  
  2862. --- Msg V3.2
  2863.  * Origin: Murdoch's_Point  - -   (1:221/177.40)
  2864.  * Tossed by SFToss v1.00b on 92/05/23  08:21:05
  2865.